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

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

#include 
#include 

class C { C() { } };

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

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

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

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

#include 
#include 

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

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

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

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

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

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