C++ has the concept of the default constructor. One is provided for you by the compiler under most common circumstances. What isn’t provided is the concept of a default constructor for an invalid value of the class. I propose the following convention for an invalid value constructor:
struct Value { Value(std::nullptr_t) {std::cout << "Null constructor" << std::endl;} Value(void* v) {std::cout << "Null pointer constructor" << std::endl;} }; int main() { Value v{nullptr}; return 0; }
The output of this program is:
Null constructor
This works because nullptr on its own has the type of std::nullptr, and so overload resolution will choose the narrowest possible match, thus the constructor that takes the single argument of nullptr.