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