title: Constructor is available outside of privately inheriting type?
body: <p>The title is only one of a few things I am confused on about the following example:</p>
  
  <pre><code>struct A {
      A() {
          std::cout &lt;&lt; "Default constructor of A" &lt;&lt; std::endl;
      }
      A(const A &amp;) {
          std::cout &lt;&lt; "Copy constructor of A" &lt;&lt; std::endl;
      }
  };
  
  struct B : private A {
      // using A::A; // does not help for question 2.    
  };
  
  int main() {
      A a;
      B b;
      B c(b); // Does not work with `a` as an argument
      return 0;
  }
  </code></pre>
  
  <p>This example outputs:</p>
  
  <pre><code>Default constructor of A
  Default constructor of A
  Copy constructor of A
  </code></pre>
  
  <p>Questions:</p>
  
  <ol>
  <li>How come the privately inherited constructors of <code>B</code> are available in <code>main</code>? This question is similar to the one in <a href="https://stackoverflow.com/q/31357515/2725810">this</a> post, but there the question was about using that constructor from inside of <code>B</code>, which is different.</li>
  <li>The copy constructor that gets called takes an <code>const A &amp;</code> argument. However, if I write <code>B c(a)</code> instead of <code>B c(b)</code>, the code does not compile. How come? (Please note that un-commenting the <code>using</code> directive in <code>B</code> does not help).</li>
  <li>This is minor, but still. How come the compiler does not warn me about unused variables <code>a</code> and <code>c</code>? </li>
  </ol>
  
  <p>Question 2 has been taken to a different <a href="https://stackoverflow.com/q/38685216/2725810">post</a>.</p>