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()