|
@@ -331,7 +331,7 @@ public:
|
|
|
}
|
|
|
|
|
|
template<typename... NewTs>
|
|
|
- Variant<NewTs...> downcast() &
|
|
|
+ Variant<NewTs...> downcast() const&
|
|
|
{
|
|
|
Variant<NewTs...> instance { Variant<NewTs...>::invalid_index, Detail::VariantConstructTag {} };
|
|
|
visit([&](const auto& value) {
|
|
@@ -342,6 +342,18 @@ public:
|
|
|
return instance;
|
|
|
}
|
|
|
|
|
|
+ template<typename... NewTs>
|
|
|
+ explicit operator Variant<NewTs...>() &&
|
|
|
+ {
|
|
|
+ return downcast<NewTs...>();
|
|
|
+ }
|
|
|
+
|
|
|
+ template<typename... NewTs>
|
|
|
+ explicit operator Variant<NewTs...>() const&
|
|
|
+ {
|
|
|
+ return downcast<NewTs...>();
|
|
|
+ }
|
|
|
+
|
|
|
private:
|
|
|
static constexpr auto data_size = integer_sequence_generate_array<size_t>(0, IntegerSequence<size_t, sizeof(Ts)...>()).max();
|
|
|
static constexpr auto data_alignment = integer_sequence_generate_array<size_t>(0, IntegerSequence<size_t, alignof(Ts)...>()).max();
|