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.
