Following works fine:
struct X { }; // OK
static_assert(std::is_default_constructible<X>::value, "Error");
Following assert fails to compile:
struct X { static_assert(std::is_default_constructible<X>::value, "Error"); }; // Fails
Why does the static_assert
inside the class fail?
Side Qn: Is std::is_default_constructible
supposed to fail for the classes with private
constructors as discussed in:
std::is_default_constructible<T> error, if constructor is private
The documentation page says that for
std::is_default_constructible<T>
:Since you are within your class, the type is not completely defined yet, i guess that's the reason for the difference.
As for the side question, this trait seems to be based on
std::is_constructible
which seems to mean that if the variable definitionis well formed the member constant
value
equal totrue
. In all other cases,value
isfalse
.So my understanding of this and my candid name based semantical instinct would say that it should fail if the default constructor is private.