title: Specialized template of a templated constructor does not get invoked
body: <p>I'm trying to mimic the behavior of inheritable constructors, since they are yet to be implemented in g++.</p>
  
  <p>I tried the techniques described here <a href="https://stackoverflow.com/a/5411992/234261">https://stackoverflow.com/a/5411992/234261</a> but I'm running into issues when I want to add my own constructors. Specifically, I am trying to add a specialized copy constructor, as well as inheriting all other constructors. Unfortunately, the inherited, more generic, copy constructor is always called instead. </p>
  
  <h2>An example</h2>
  
  <pre><code>#include &lt;iostream&gt;
  struct A {
    A(){}
    A(const A &amp;){ std::cout &lt;&lt; "IN A" &lt;&lt; std::endl; }
  };
  
  struct B : public A{
    template&lt;typename ...Args,
             typename = typename std::enable_if
        &lt;
               std::is_constructible&lt;A, Args...&gt;::value
               &gt;::type&gt;
    B(Args &amp;&amp;...args)
      : A(std::forward&lt;Args&gt;(args)...) {}
  
    // These don't work either.                                                                                                                
    //B(const A &amp;a):A(a){ std::cout &lt;&lt; "IN B-A" &lt;&lt; std::endl; }                                                                                
    //B(const B &amp;b):A(b){ std::cout &lt;&lt; "IN B-B" &lt;&lt; std::endl; }                                                                                
  };
  template&lt;&gt;
  B::B(const A &amp;a):A(a){ std::cout &lt;&lt; "IN B-A" &lt;&lt; std::endl; }
  template&lt;&gt;
  B::B(const B &amp;b):A(b){ std::cout &lt;&lt; "IN B-B" &lt;&lt; std::endl; }
  
  int main(){
    A a;      // 1. Prints nothing as expected                                                                                                    
    B b(a);   // 2. Prints "IN A" only                                                                                                              
    B b1(b);  // 3. Prints "IN A" only                                                                                                              
    return 0;
  }
  </code></pre>
  
  <p>I would like [3] to print <strong>IN A</strong> and then <strong>IN B-B</strong>. Somehow I have managed to get [2] to work in my actual code, but can't repeat it in this small example for some reason. </p>
  
  <p>I understand that the template constructor is being created due to the fact that the subclass(B) can actually be used to construct the superclass(A). </p>
  
  <p>Why, however, does my explicit specialization not get invoked? Am I specializing incorrectly? Is there a better way?</p>
  
  <hr>
  
  <p>Link to this example if anyone wants to run it <a href="http://ideone.com/eUHD5" rel="nofollow noreferrer">http://ideone.com/eUHD5</a></p>
  
  <p>I'm using gcc 4.6</p>