I don't understand the reasoning for the inclusion of std::nullopt_t
in the standard. Does it exist strictly for convenience, or is it required in some niche circumstances?
To be clear, I understand that it is used as an argument to construct empty std::optional
objects. But considering a default constructor for std::optional
already exists, there seems to be no obvious motivation for the existence of std::nullopt_t
. Must such a constructor and assignment operator exist for std::optional
to conform to a particular concept? If so, which concept?
nullopt_t
is the type of nullopt
which indicates disengaged optional
state. nullopt
allows disambiguating overloads such as (example from the optional
proposal):
void run(complex<double> v); void run(optional<string> v); run(nullopt); // pick the second overload run({}); // ambiguous
Here is another example I just ran into:
// GCC: error: expected primary-expression before '{' token
// Clang: error: initializer list cannot be used on the right hand side of operator ':'
std::optional<int> x = some_condition ? std::optional(0) : {};
// works
std::optional<int> y = some_condition ? std::optional(0) : std::nullopt;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With