Ошибка 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?