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_constructiblewhich seems to mean that if the variable definitionis well formed the member constant
valueequal totrue. In all other cases,valueisfalse.So my understanding of this and my candid name based semantical instinct would say that it should fail if the default constructor is private.