std::elide isn't special. Any user could write it. Any user could write a special case of it. Any user can write a conversion operator.
If there are classes broken for std::elide they're broken for all those types as well.
Even if unconstrained unary constructors aren't broken in general the ones that plausibly interact with std::elide (and all the types in the categories I mentioned above) are.
If they weren't we wouldn't be having this conversation.
--Robert
On Saturday, June 8, 2024, Robert A.H. Leahy wrote:
Classes with unconstrained unary constructors are just broken, as you've discovered.
So then should we write a paper to deprecate unary unconstrained constructors in C++26?
I don't think there's anything wrong with unary unconstrained constructors. I see how they're inconvenient for 'std::elide', but doesn't make them inherently broken.