VCCC  2024.05
VisualCamp Common C++ library
variant

Implementation of STL header <variant> More...

Detailed Description

See <variant> at cppreference.com for more information.

Modules

 variant_alternative
 

Classes

class  bad_variant_access
 
struct  hash< vccc::variant< Ts... > >
 
struct  hash<::vccc::monostate >
 
class  variant< Types >
 a type-safe discriminated union More...
 
struct  variant_size< T >
 
struct  variant_size< variant< Ts... > >
 
struct  variant_size< const T >
 

Functions

template<typename T , typename... Types, std::enable_if_t<(type_sequence< Types... >::template count< T >==1), int > = 0>
constexpr bool holds_alternative (const variant< Types... > &v) noexcept
 
template<std::size_t I, typename... Types>
constexpr variant_alternative_t< I, variant< Types... > > & get (variant< Types... > &v)
 
template<std::size_t I, typename... Types>
constexpr variant_alternative_t< I, variant< Types... > > && get (variant< Types... > &&v)
 
template<std::size_t I, typename... Types>
constexpr const variant_alternative_t< I, variant< Types... > > & get (const variant< Types... > &v)
 
template<std::size_t I, typename... Types>
constexpr const variant_alternative_t< I, variant< Types... > > && get (const variant< Types... > &&v)
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr T & get (variant< Types... > &v)
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr T && get (variant< Types... > &&v)
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr const T & get (const variant< Types... > &v)
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr const T && get (const variant< Types... > &&v)
 
template<std::size_t I, typename... Types>
constexpr std::add_pointer_t< variant_alternative_t< I, variant< Types... > > > get_if (variant< Types... > *pv) noexcept
 
template<std::size_t I, typename... Types>
constexpr std::add_pointer_t< const variant_alternative_t< I, variant< Types... > > > get_if (const variant< Types... > *pv) noexcept
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr std::add_pointer_t< T > get_if (variant< Types... > *pv) noexcept
 
template<typename T , typename... Types, std::enable_if_t<(type_sequence_type_count< T, type_sequence< Types... >>::value==1), int > = 0>
constexpr std::add_pointer_t< const T > get_if (const variant< Types... > *pv) noexcept
 
template<typename... Types, std::enable_if_t< conjunction< equality_comparable< Types >... >::value, int > = 0>
constexpr bool operator== (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types, std::enable_if_t< conjunction< equality_comparable< Types >... >::value, int > = 0>
constexpr bool operator!= (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types, std::enable_if_t< conjunction< totally_ordered< Types >... >::value, int > = 0>
constexpr bool operator< (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types, std::enable_if_t< conjunction< totally_ordered< Types >... >::value, int > = 0>
constexpr bool operator> (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types, std::enable_if_t< conjunction< totally_ordered< Types >... >::value, int > = 0>
constexpr bool operator<= (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types, std::enable_if_t< conjunction< totally_ordered< Types >... >::value, int > = 0>
constexpr bool operator>= (const variant< Types... > &v, const variant< Types... > &w)
 
template<typename... Types>
constexpr std::enable_if_t< conjunction< std::is_move_constructible< Types >..., is_swappable< Types >... >::valueswap (variant< Types... > &lhs, variant< Types... > &rhs) noexcept(noexcept(lhs.swap(rhs)))
 
template<typename R , typename Visitor , typename... Variants, std::enable_if_t< conjunction< is_invocable< detail::as_variant_niebloid, Variants >... >::value, int > = 0>
constexpr R visit (Visitor &&vis, Variants &&... vars)
 
template<typename Visitor , typename... Variants, std::enable_if_t< conjunction< is_invocable< detail::as_variant_niebloid, Variants >... >::value, int > = 0>
constexpr decltype(auto) visit (Visitor &&vis, Variants &&... vars)
 

Variables

constexpr VCCC_INLINE_OR_STATIC std::size_t variant_npos = -1
 
template<typename T >
constexpr VCCC_INLINE_OR_STATIC std::size_t variant_size_v = variant_size<T>::value
 

Function Documentation

◆ get() [1/8]

constexpr const variant_alternative_t<I, variant<Types...> >&& vccc::get ( const variant< Types... > &&  v)
constexpr

◆ get() [2/8]

constexpr const T&& vccc::get ( const variant< Types... > &&  v)
constexpr

◆ get() [3/8]

constexpr const variant_alternative_t<I, variant<Types...> >& vccc::get ( const variant< Types... > &  v)
constexpr

◆ get() [4/8]

constexpr const T& vccc::get ( const variant< Types... > &  v)
constexpr

◆ get() [5/8]

constexpr variant_alternative_t<I, variant<Types...> >&& vccc::get ( variant< Types... > &&  v)
constexpr

◆ get() [6/8]

constexpr T&& vccc::get ( variant< Types... > &&  v)
constexpr

◆ get() [7/8]

constexpr variant_alternative_t<I, variant<Types...> >& vccc::get ( variant< Types... > &  v)
constexpr

◆ get() [8/8]

constexpr T& vccc::get ( variant< Types... > &  v)
constexpr

◆ get_if() [1/4]

constexpr std::add_pointer_t<const variant_alternative_t<I, variant<Types...> > > vccc::get_if ( const variant< Types... > *  pv)
constexprnoexcept

◆ get_if() [2/4]

constexpr std::add_pointer_t<const T> vccc::get_if ( const variant< Types... > *  pv)
constexprnoexcept

◆ get_if() [3/4]

constexpr std::add_pointer_t<variant_alternative_t<I, variant<Types...> > > vccc::get_if ( variant< Types... > *  pv)
constexprnoexcept

◆ get_if() [4/4]

constexpr std::add_pointer_t<T> vccc::get_if ( variant< Types... > *  pv)
constexprnoexcept

◆ holds_alternative()

constexpr bool vccc::holds_alternative ( const variant< Types... > &  v)
constexprnoexcept

◆ operator!=()

constexpr bool vccc::operator!= ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ operator<()

constexpr bool vccc::operator< ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ operator<=()

constexpr bool vccc::operator<= ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ operator==()

constexpr bool vccc::operator== ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ operator>()

constexpr bool vccc::operator> ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ operator>=()

constexpr bool vccc::operator>= ( const variant< Types... > &  v,
const variant< Types... > &  w 
)
constexpr

◆ swap()

constexpr std::enable_if_t<conjunction<std::is_move_constructible<Types>..., is_swappable<Types>...>::value> vccc::swap ( variant< Types... > &  lhs,
variant< Types... > &  rhs 
)
constexprnoexcept

◆ visit() [1/2]

constexpr R vccc::visit ( Visitor &&  vis,
Variants &&...  vars 
)
constexpr

◆ visit() [2/2]

constexpr decltype(auto) vccc::visit ( Visitor &&  vis,
Variants &&...  vars 
)
constexpr

Variable Documentation

◆ variant_npos

constexpr VCCC_INLINE_OR_STATIC std::size_t variant_npos = -1
constexpr

◆ variant_size_v

constexpr VCCC_INLINE_OR_STATIC std::size_t variant_size_v = variant_size<T>::value
constexpr