22 General utilities library [utilities] (original) (raw)

22.6 Variants [variant]

22.6.2 Header synopsis [variant.syn]

#include <compare> namespace std { template<class... Types> class variant;template<class T> struct variant_size; template<class T> struct variant_size<const T>;template<class T> constexpr size_t variant_size_v = variant_size<T>::value;template<class... Types> struct variant_size<variant<Types...>>;template<size_t I, class T> struct variant_alternative; template<size_t I, class T> struct variant_alternative<I, const T>;template<size_t I, class T> using variant_alternative_t = typename variant_alternative<I, T>::type;template<size_t I, class... Types> struct variant_alternative<I, variant<Types...>>;inline constexpr size_t variant_npos = -1;template<class T, class... Types> constexpr bool holds_alternative(const variant<Types...>&) noexcept;template<size_t I, class... Types> constexpr variant_alternative_t<I, variant<Types...>>& get(variant<Types...>&); template<size_t I, class... Types> constexpr variant_alternative_t<I, variant<Types...>>&& get(variant<Types...>&&); template<size_t I, class... Types> constexpr const variant_alternative_t<I, variant<Types...>>& get(const variant<Types...>&); template<size_t I, class... Types> constexpr const variant_alternative_t<I, variant<Types...>>&& get(const variant<Types...>&&); template<class T, class... Types> constexpr T& get(variant<Types...>&); template<class T, class... Types> constexpr T&& get(variant<Types...>&&); template<class T, class... Types> constexpr const T& get(const variant<Types...>&); template<class T, class... Types> constexpr const T&& get(const variant<Types...>&&); template<size_t I, class... Types> constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>> get_if(variant<Types...>*) noexcept;template<size_t I, class... Types> constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>> get_if(const variant<Types...>*) noexcept;template<class T, class... Types> constexpr add_pointer_t<T> get_if(variant<Types...>*) noexcept;template<class T, class... Types> constexpr add_pointer_t<const T> get_if(const variant<Types...>*) noexcept;template<class... Types> constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);template<class... Types> constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);template<class... Types> constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);template<class... Types> constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);template<class... Types> constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);template<class... Types> constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);template<class... Types> requires (three_way_comparable<Types> && ...) constexpr common_comparison_category_t<compare_three_way_result_t<Types>...> operator<=>(const variant<Types...>&, const variant<Types...>&);template<class Visitor, class... Variants> constexpr see below visit(Visitor&&, Variants&&...);template<class R, class Visitor, class... Variants> constexpr R visit(Visitor&&, Variants&&...);struct monostate;constexpr bool operator==(monostate, monostate) noexcept;constexpr strong_ordering operator<=>(monostate, monostate) noexcept;template<class... Types> constexpr void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);class bad_variant_access;template<class T> struct hash;template<class... Types> struct hash<variant<Types...>>;template<> struct hash<monostate>;}