title: std::is_default_constructible<T> error, if constructor is private
body: <p>I have following snippet</p>
  
  <pre><code>#include &lt;type_traits&gt;
  #include &lt;boost/type_traits.hpp&gt;
  
  class C { C() { } };
  
  int main()
  {
     static_assert(!boost::has_trivial_default_constructor&lt;C&gt;::value, "Constructible");
     static_assert(!std::is_default_constructible&lt;C&gt;::value, "Constructible");
  }
  </code></pre>
  
  <p>Conditions are not equal, but first condition works fine and second construction give error, that constructor is private. Compiler gcc 4.7... So, is this gcc bug, or it's defined by standard?</p>
  
  <p><a href="http://liveworkspace.org/code/NDQyMD" rel="nofollow">http://liveworkspace.org/code/NDQyMD</a>$5</p>
  
  <p>OK. Since this conditions are really unequal - we can use something like this</p>
  
  <pre><code>#include &lt;type_traits&gt;
  #include &lt;boost/type_traits.hpp&gt;
  
  class C { private: C() noexcept(false) { } };
  
  int main()
  {
     static_assert(!boost::has_nothrow_constructor&lt;C&gt;::value, "Constructible");
     static_assert(!std::is_nothrow_constructible&lt;C&gt;::value, "Constructible");
  }
  </code></pre>
  
  <p><a href="http://liveworkspace.org/code/NDQyMD" rel="nofollow">http://liveworkspace.org/code/NDQyMD</a>$24</p>
  
  <p>Anyway, i know, that static_assert should not fails, since types are really not default constructible/not nothrow constructible. <strong>Question is: WHY there is compilation error, not by my static assert?</strong></p>