On Sunday, September 25th, 2022 at 10:59 AM, Bengt Gustafsson via Std-Proposals <std-proposals@lists.isocpp.org> wrote:

Instead of using an ill-suited class such as std::variant to store an instance of one of a set of subclasses and require std::variant to get a new method to handle this situation better I think that a more suitable way of storing a subclass instance would be inside a polymorphic_value with SBO buffer of sufficient size.


A type alias which handles a closed set of subclasses size and alignment needs called polymorphic_value_for<T, SubClasses...> is included in the latest version for added convenience. I'm unsure if this is important enough to be standardized though. Enumerating all the subclasses seems like such an anti-pattern.

polymorphic_value_for<T, SubClasses...>
looks like a closed set but is not.

std::variant dispatches on a closed set of
types, and I see nothing wrong with
performing such dispatch with a compiler-
generated vtable. Doing so violates no type
system and delivers cleaner semantics than
a type that behaves as-if an unknown set
of types with size constraints.
polymorphic_value is a useful type, but the
claim that suggests "it suites better for your
purpose" is unproven.

Zhihao Yuan, ID lichray
The best way to predict the future is to invent it.