Ошибка std :: is_default_constructible <T>, если конструктор является закрытым

У меня есть следующий фрагмент

#include <type_traits>
#include <boost/type_traits.hpp>

class C { C() { } };

int main()
{
   static_assert(!boost::has_trivial_default_constructor<C>::value, "Constructible");
   static_assert(!std::is_default_constructible<C>::value, "Constructible");
}

Условия не равны, но первое условие работает нормально, а вторая конструкция выдает ошибку, этот конструктор является частным. Компилятор gcc 4.7 ... Итак, это ошибка gcc или она определяется стандартом?

http://liveworkspace.org/code/NDQyMD$ 5

ХОРОШО. Поскольку эти условия действительно неравны - мы можем использовать что-то вроде этого

#include <type_traits>
#include <boost/type_traits.hpp>

class C { private: C() noexcept(false) { } };

int main()
{
   static_assert(!boost::has_nothrow_constructor<C>::value, "Constructible");
   static_assert(!std::is_nothrow_constructible<C>::value, "Constructible");
}

http://liveworkspace.org/code/NDQyMD$ 24

В любом случае, я знаю, что static_assert не должен завершаться сбоем, так как типы на самом деле не являются конструктивными по умолчанию / nothrow.Вопрос: ПОЧЕМУ ошибка компиляции, а не мой статический assert?

Ответы на вопрос(1)

Ваш ответ на вопрос