Why is the constructor of std::in_place_t defaulted and explicit?

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.


You want a type like this to only be explicitly 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()