cppreference shows the following definition of std::in_place_t
:
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr std::in_place_t in_place{};
Why have they added an explicit
and defaulted constructor? Why it isn't left out? What are the benefits?
You want a type like this to only be explicit
ly constructible, because it exists to denote a particular kind of constructor overload, in places where {}
might reasonably be found.
Consider the following constructions
std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()
If you leave out the constructor it will not be explicit
. If you don't = default
it it will not be trivial.
So, if you want the constructor to be explicit
and you also want it to remain trivial, what you see is the only option available.
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