|
| Variant (Variant const &)=default |
|
| Variant (Variant &&)=default |
|
| ~Variant ()=default |
|
auto | operator= (Variant const &) -> Variant &requires(trivially_copy_assignable)=default |
|
auto | operator= (Variant &&) -> Variant &requires(trivially_move_assignable)=default |
|
constexpr | Variant () |
|
constexpr | Variant (Variant const &other) |
|
constexpr | Variant (Variant &&other) |
|
template<typename U>
requires (!concepts::RemoveCVRefSameAs<U, Variant> && !concepts::InstanceOf<meta::RemoveCVRef<U>, InPlaceType> && !concepts::Constexpr<meta::RemoveCVRef<U>> && concepts::Invocable<Selector<U>, U> && concepts::ConstructibleFrom<meta::InvokeResult<Selector<U>, U>, U>) |
constexpr | Variant (U &&value) |
|
template<size_t index, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, Args...>) |
constexpr | Variant (Constexpr< index >, Args &&... args) |
|
template<size_t index, typename U, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>) |
constexpr | Variant (Constexpr< index >, std::initializer_list< U > list, Args &&... args) |
|
template<typename T, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, Args...>) |
constexpr | Variant (InPlaceType< T >, Args &&... args) |
|
template<typename T, typename U, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>) |
constexpr | Variant (InPlaceType< T >, std::initializer_list< U > list, Args &&... args) |
|
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ConstructibleFrom<Types, Other const&> && ...); }) |
constexpr | explicit ((!concepts::ConvertibleTo< Other const &, Types >||...)) Variant(Variant< Other... > const &other) |
|
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ConstructibleFrom<Types, Other> && ...); }) |
constexpr | explicit ((!concepts::ConvertibleTo< Other, Types >||...)) Variant(Variant< Other... > &&other) |
|
constexpr | ~Variant () |
|
constexpr auto | operator= (Variant const &other) -> Variant &requires(!trivially_copy_assignable &©able) |
|
constexpr auto | operator= (Variant &&other) -> Variant &requires(!trivially_move_assignable &&movable) |
|
template<typename U>
requires (!concepts::RemoveCVRefSameAs<U, Variant> && !concepts::InstanceOf<meta::RemoveCVRef<U>, InPlaceType> && !concepts::Constexpr<meta::RemoveCVRef<U>> && concepts::Invocable<Selector<U>, U> && concepts::ConstructibleFrom<meta::InvokeResult<Selector<U>, U>, U>) |
constexpr auto | operator= (U &&value) -> Variant & |
|
constexpr auto | index () const -> size_t |
|
template<size_t index, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, Args...>) |
constexpr auto | emplace (Args &&... args) -> T & |
|
template<size_t index, typename U, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>) |
constexpr auto | emplace (std::initializer_list< U > list, Args &&... args) -> T & |
|
template<typename T, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, Args...>) |
constexpr auto | emplace (Args &&... args) -> T & |
|
template<typename T, typename U, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>) |
constexpr auto | emplace (std::initializer_list< U > list, Args &&... args) -> T & |
|
constexpr auto | get () &-> decltype(auto) |
|
constexpr auto | get () const &-> decltype(auto) |
|
constexpr auto | get () &&-> decltype(auto) |
|
constexpr auto | get () const &&-> decltype(auto) |
|
constexpr auto | get () &-> decltype(auto) |
|
constexpr auto | get () const &-> decltype(auto) |
|
constexpr auto | get () &&-> decltype(auto) |
|
constexpr auto | get () const &&-> decltype(auto) |
|
|
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::EqualityComparableWith<Types, Other> && ...); }) |
constexpr friend auto | operator== (Variant const &a, Variant< Other... > const &b) -> bool |
|
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ThreeWayComparableWith<Types, Other> && ...); }) |
constexpr friend auto | operator<=> (Variant const &a, Variant< Other... > const &b) |
|
template<size_t index, concepts::DerivedFrom< Variant > Self = Variant> |
constexpr friend auto | tag_invoke (types::Tag< variant_alternative >, InPlaceType< Self >, Constexpr< index >) -> meta::At< List, index > |
|
template<size_t index, concepts::DerivedFrom< Variant > Self = Variant> |
constexpr friend auto | tag_invoke (types::Tag< variant_alternative >, InPlaceType< Self const >, Constexpr< index >) -> meta::At< List, index > const |
|
template<concepts::DerivedFrom< Variant > Self = Variant> |
constexpr friend auto | tag_invoke (types::Tag< variant_size >, InPlaceType< Self >) -> size_t |
|
template<size_t index, typename Self = Variant>
requires (concepts::DerivedFrom<meta::RemoveCVRef<Self>, Variant>) |
constexpr friend auto | tag_invoke (types::Tag< util::get_in_place >, Constexpr< index >, Self &&self) -> meta::Like< Self, meta::At< List, index > > && |
|
template<typename T, typename Self = Variant>
requires (concepts::DerivedFrom<meta::RemoveCVRef<Self>, Variant> && meta::UniqueType<T, List>) |
constexpr friend auto | tag_invoke (types::Tag< util::get_in_place >, InPlaceType< T >, Self &&self) -> meta::Like< Self, T > && |
|
template<concepts::DerivedFrom< Variant > Self = Variant> |
constexpr friend auto | tag_invoke (types::Tag< variant_types >, InPlaceType< Self >) -> List |
|