Iros
 
Loading...
Searching...
No Matches
di::vocab::Variant< Types > Class Template Reference

#include <di/vocab/variant/variant.h>

Inheritance diagram for di::vocab::Variant< Types >:
[legend]

Public Member Functions

 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 &&copyable)
 
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 &
 
- Public Member Functions inherited from di::util::AddMemberGet< Variant< Types... > >
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)
 

Friends

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
 

Constructor & Destructor Documentation

◆ Variant() [1/10]

template<typename... Types>
di::vocab::Variant< Types >::Variant ( Variant< Types > const & )
default

◆ Variant() [2/10]

template<typename... Types>
di::vocab::Variant< Types >::Variant ( Variant< Types > && )
default

◆ ~Variant() [1/2]

template<typename... Types>
di::vocab::Variant< Types >::~Variant ( )
default

◆ Variant() [3/10]

template<typename... Types>
di::vocab::Variant< Types >::Variant ( )
inlineconstexpr

◆ Variant() [4/10]

template<typename... Types>
di::vocab::Variant< Types >::Variant ( Variant< Types > const & other)
inlineconstexpr

◆ Variant() [5/10]

template<typename... Types>
di::vocab::Variant< Types >::Variant ( Variant< Types > && other)
inlineconstexpr

◆ Variant() [6/10]

template<typename... Types>
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>)
di::vocab::Variant< Types >::Variant ( U && value)
inlineconstexpr

◆ Variant() [7/10]

template<typename... Types>
template<size_t index, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, Args...>)
di::vocab::Variant< Types >::Variant ( Constexpr< index > ,
Args &&... args )
inlineexplicitconstexpr

◆ Variant() [8/10]

template<typename... Types>
template<size_t index, typename U, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
di::vocab::Variant< Types >::Variant ( Constexpr< index > ,
std::initializer_list< U > list,
Args &&... args )
inlineexplicitconstexpr

◆ Variant() [9/10]

template<typename... Types>
template<typename T, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, Args...>)
di::vocab::Variant< Types >::Variant ( InPlaceType< T > ,
Args &&... args )
inlineexplicitconstexpr

◆ Variant() [10/10]

template<typename... Types>
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...>)
di::vocab::Variant< Types >::Variant ( InPlaceType< T > ,
std::initializer_list< U > list,
Args &&... args )
inlineexplicitconstexpr

◆ ~Variant() [2/2]

template<typename... Types>
di::vocab::Variant< Types >::~Variant ( )
inlineconstexpr

Member Function Documentation

◆ emplace() [1/4]

template<typename... Types>
template<size_t index, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, Args...>)
auto di::vocab::Variant< Types >::emplace ( Args &&... args) -> T&
inlineconstexpr

◆ emplace() [2/4]

template<typename... Types>
template<typename T, typename... Args, auto index = meta::Lookup<T, List>>
requires (meta::UniqueType<T, List> && concepts::ConstructibleFrom<T, Args...>)
auto di::vocab::Variant< Types >::emplace ( Args &&... args) -> T&
inlineconstexpr

◆ emplace() [3/4]

template<typename... Types>
template<size_t index, typename U, typename... Args, typename T = meta::At<List, index>>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
auto di::vocab::Variant< Types >::emplace ( std::initializer_list< U > list,
Args &&... args ) -> T&
inlineconstexpr

◆ emplace() [4/4]

template<typename... Types>
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...>)
auto di::vocab::Variant< Types >::emplace ( std::initializer_list< U > list,
Args &&... args ) -> T&
inlineconstexpr

◆ explicit() [1/2]

template<typename... Types>
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ConstructibleFrom<Types, Other const&> && ...); })
di::vocab::Variant< Types >::explicit ( (!concepts::ConvertibleTo< Other const &, Types >||...) ) const &
inlineconstexpr

◆ explicit() [2/2]

template<typename... Types>
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ConstructibleFrom<Types, Other> && ...); })
di::vocab::Variant< Types >::explicit ( (!concepts::ConvertibleTo< Other, Types >||...) ) &&
inlineconstexpr

◆ index()

template<typename... Types>
auto di::vocab::Variant< Types >::index ( ) const -> size_t
inlineconstexpr

◆ operator=() [1/5]

template<typename... Types>
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>)
auto di::vocab::Variant< Types >::operator= ( U && value) -> Variant&
inlineconstexpr

◆ operator=() [2/5]

template<typename... Types>
auto di::vocab::Variant< Types >::operator= ( Variant< Types > && ) -> Variant &requires(trivially_move_assignable)=default
default

◆ operator=() [3/5]

template<typename... Types>
auto di::vocab::Variant< Types >::operator= ( Variant< Types > && other) -> Variant& requires(!trivially_move_assignable && movable)
inlineconstexpr

◆ operator=() [4/5]

template<typename... Types>
auto di::vocab::Variant< Types >::operator= ( Variant< Types > const & ) -> Variant &requires(trivially_copy_assignable)=default
default

◆ operator=() [5/5]

template<typename... Types>
auto di::vocab::Variant< Types >::operator= ( Variant< Types > const & other) -> Variant& requires(!trivially_copy_assignable && copyable)
inlineconstexpr

Friends And Related Symbol Documentation

◆ operator<=>

template<typename... Types>
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::ThreeWayComparableWith<Types, Other> && ...); })
friend auto operator<=> ( Variant< Types > const & a,
Variant< Other... > const & b )
friend

◆ operator==

template<typename... Types>
template<typename... Other>
requires (sizeof...(Types) == sizeof...(Other) && requires { requires(concepts::EqualityComparableWith<Types, Other> && ...); })
friend auto operator== ( Variant< Types > const & a,
Variant< Other... > const & b ) -> bool
friend

◆ tag_invoke [1/6]

template<typename... Types>
template<size_t index, typename Self = Variant>
requires (concepts::DerivedFrom<meta::RemoveCVRef<Self>, Variant>)
friend auto tag_invoke ( types::Tag< util::get_in_place > ,
Constexpr< index > ,
Self && self ) -> meta::Like<Self, meta::At<List, index>>&&
friend

◆ tag_invoke [2/6]

template<typename... Types>
template<typename T, typename Self = Variant>
requires (concepts::DerivedFrom<meta::RemoveCVRef<Self>, Variant> && meta::UniqueType<T, List>)
friend auto tag_invoke ( types::Tag< util::get_in_place > ,
InPlaceType< T > ,
Self && self ) -> meta::Like<Self, T>&&
friend

◆ tag_invoke [3/6]

template<typename... Types>
template<size_t index, concepts::DerivedFrom< Variant > Self = Variant>
friend auto tag_invoke ( types::Tag< variant_alternative > ,
InPlaceType< Self > ,
Constexpr< index >  ) -> meta::At<List, index>
friend

◆ tag_invoke [4/6]

template<typename... Types>
template<size_t index, concepts::DerivedFrom< Variant > Self = Variant>
friend auto tag_invoke ( types::Tag< variant_alternative > ,
InPlaceType< Self const > ,
Constexpr< index >  ) -> meta::At<List, index> const
friend

◆ tag_invoke [5/6]

template<typename... Types>
template<concepts::DerivedFrom< Variant > Self = Variant>
friend auto tag_invoke ( types::Tag< variant_size > ,
InPlaceType< Self >  ) -> size_t
friend

◆ tag_invoke [6/6]

template<typename... Types>
template<concepts::DerivedFrom< Variant > Self = Variant>
friend auto tag_invoke ( types::Tag< variant_types > ,
InPlaceType< Self >  ) -> List
friend

The documentation for this class was generated from the following files: