title: how to solve unqualified name lookup problem
body: <p>I have the following simplified program:</p>
  
  <pre><code>class Base { };
  
  template &lt; typename T &gt;
  class X: public T
  {
      public:
          using TOP = T;
  };
  
  // with dependent template parm    
  template &lt; typename T &gt;
  class Y: public X&lt; T &gt;
  {
      // I have to write down the full name of the base class
      using X&lt;T&gt;::TOP::operator =;
  };
  
  // without depending template parameter
  template &lt; typename T &gt;
  class Y: public X&lt; Base &gt;
  {
      // I simply can use the defined type from the base class
      using TOP::operator =;
  };
  
  
  int main()
  {
      Y&lt; Base &gt; y ;
  }
  </code></pre>
  
  <p>The question is now, if there is any way to simplify the full repetition of
  the base class type. My original code is something like that:</p>
  
  <pre><code>template &lt; typename VAR_TYPE &gt;
  class VarObserved: public ConstructAll2&lt;
                     UsingHelperV_None,
                     UsingHelper_None,
                     CONTAINERL&lt; AssignConst &gt;,
                     CONTAINERL&lt; Print &gt;,
                     CONTAINERL&lt; DataStore &gt;,
                     CONTAINERL&lt; Distribute_ &gt;,
                     CONTAINERL&lt; EndForward &gt;,
                     CONTAINERSP&lt; DataStoreBase, VAR_TYPE &gt;
                     &gt;
  {
      public:
          using SELF = ConstructAll2&lt;
              UsingHelperV_None,
              UsingHelper_None,
              CONTAINERL&lt; AssignConst &gt;,
              CONTAINERL&lt; Print &gt;,
              CONTAINERL&lt; DataStore &gt;,
              CONTAINERL&lt; Distribute_ &gt;, 
              CONTAINERL&lt; EndForward     &gt;,
              CONTAINERSP&lt; DataStoreBase, VAR_TYPE &gt;   // see text 1)
                  &gt;;
  
          VarObserved( const VAR_TYPE&amp; var ): SELF{{ var }}{}
          using SELF::AssignConst::operator=;
  };
  </code></pre>
  
  <p>As you can see, the full repetition of all the template parameters is not very "nice". Any chance to fix that?</p>
  
  <p>If above code has no dependent template parameter ( change the single line 1.) ) from the example above to:</p>
  
  <pre><code>CONTAINERSP&lt; DataStoreBase, int&gt;
  </code></pre>
  
  <p>the class becomes totaly simple and much more easy to maintain:</p>
  
  <pre><code>...
  VarObserved( const VAR_TYPE&amp; var ): ConstructAll2{{ var }}{}
  using AssignConst::operator=;
  ....
  </code></pre>
  
  <p>As a reference to the underlying problem I found already that question</p>
  
  <p><a href="https://stackoverflow.com/questions/7076169/not-declared-in-this-scope-error-with-templates-and-inheritance">&quot;not declared in this scope&quot; error with templates and inheritance</a></p>
  
  <p>but no idea to simplify my code.</p>