Охота вместо std::variant<std::unique_ptr<Agg1>, std::unique_ptr<Agg2>> сделать std::unique_ptr<std::variant<Agg1, Agg2>>.
Такую штуку я могу придумать:
template<typename T>
struct AggregateWrapper : T
{
template<typename ...Ts>
constexpr AggregateWrapper(Ts&&... args) noexcept(std::is_nothrow_constructible_v<T, Ts...>)
: T{std::forward<Ts>(args)...}
{
}
};
но есть ли современные изкоробочные решения (желательно не отменяющие возмоность использовать designated initializers)?
Вот такую штуку придумал https://godbolt.org/z/rd3bYfbKE
Обсуждают сегодня