22 General utilities library [utilities]

22.6 Variants [variant]

22.6.3 Class template variant [variant.variant]

22.6.3.1 General [variant.variant.general]

namespace std { template<class. Types> class variant { public: / [variant.ctor], constructors constexpr variant() noexcept(see below); constexpr variant(const variant&) noexcept(see below); constexpr variant(variant&&) noexcept(see below); template<class T> constexpr variant(T&&) noexcept(see below); template<class T, class. Args> constexpr explicit variant(in_place_type_t<T>, Args&&.); template<class T, class U, class. Args> constexpr explicit variant(in_place_type_t<T>, initializer_list<U>, Args&&.); template<size_t I, class. Args> constexpr explicit variant(in_place_index_t<I>, Args&&.); template<size_t I, class U, class. Args> constexpr explicit variant(in_place_index_t<I>, initializer_list<U>, Args&&.); / [variant.dtor], destructor constexpr ~variant(); / [variant.assign], assignment constexpr variant& operator=(const variant&); constexpr variant& operator=(variant&&) noexcept(see below); template<class T> constexpr variant& operator=(T&&) noexcept(see below); / [variant.mod], modifiers template<class T, class. Args> constexpr T& emplace(Args&&.); template<class T, class U, class. Args> constexpr T& emplace(initializer_list<U>, Args&&.); template<size_t I, class. Args> constexpr variant_alternative_t<I, variant<Types..>& emplace(Args&&.); template<size_t I, class U, class. Args> constexpr variant_alternative_t<I, variant<Types..>& emplace(initializer_list<U>, Args&&.); / [variant.status], value status constexpr bool valueless_by_exception() const noexcept; constexpr size_t index() const noexcept; / [variant.swap], swap constexpr void swap(variant&) noexcept(see below); / [variant.visit], visitation template<class Self, class Visitor> constexpr decltype(auto) visit(this Self&&, Visitor&&); template<class R, class Self, class Visitor> constexpr R visit(this Self&&, Visitor&&); }; }
Any instance of variant at any given time either holds a value of one of its alternative types or holds no value.
When an instance of variant holds a value of alternative type T, it means that a value of type T, referred to as the variant object's contained value, is nested within ([intro.object]) the variant object.
All types in Types shall meet the Cpp17Destructible requirements (Table 35).
A program that instantiates the definition of variant with no template arguments is ill-formed.
If a program declares an explicit or partial specialization of variant, the program is ill-formed, no diagnostic required.

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant