Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::variant_size,std::variant_size_v

      From cppreference.com
      <cpp‎ |utility‎ |variant
       
       
      Utilities library
       
       
      Defined in header<variant>
      template<class T>
      struct variant_size;/* undefined */
      (1)(since C++17)
      template<class...Types>

      struct variant_size<std::variant<Types...>>

         :std::integral_constant<std::size_t, sizeof...(Types)>{};
      (2)(since C++17)
      template<class T>
      class variant_size<const T>;
      (3)(since C++17)
      template<class T>
      class variant_size<volatile T>;
      (4)(since C++17)
      (deprecated in C++20)
      template<class T>
      class variant_size<constvolatile T>;
      (5)(since C++17)
      (deprecated in C++20)

      Provides access to the number of alternatives in a possibly cv-qualified variant as a compile-time constant expression.

      Formally,

      2) meets theUnaryTypeTrait requirements with a base characteristic ofstd::integral_constant<std::size_t, sizeof...(Types)>
      3-5) meets theUnaryTypeTrait requirements with a base characteristic ofstd::integral_constant<std::size_t, std::variant_size<T>::value>

      Contents

      [edit]Helper variable template

      template<class T>
      constexprstd::size_t variant_size_v= std::variant_size<T>::value;
      (since C++17)

      Inherited fromstd::integral_constant

      Member constants

      value
      [static]
      sizeof...(Types)
      (public static member constant)

      Member functions

      operator std::size_t
      converts the object tostd::size_t, returnsvalue
      (public member function)
      operator()
      (C++14)
      returnsvalue
      (public member function)

      Member types

      Type Definition
      value_typestd::size_t
      typestd::integral_constant<std::size_t, value>

      [edit]Notes

      All specializations ofstd::variant_size satisfyUnaryTypeTrait withbase characteristicstd::integral_constant<std::size_t, N> for someN.

      [edit]Example

      Run this code
      #include <any>#include <variant> static_assert(std::variant_size_v<std::variant<>>==0);static_assert(std::variant_size_v<std::variant<int>>==1);static_assert(std::variant_size_v<std::variant<int,int>>==2);static_assert(std::variant_size_v<std::variant<int,int,int>>==3);static_assert(std::variant_size_v<std::variant<int,float,double>>==3);static_assert(std::variant_size_v<std::variant<std::monostate,void>>==2);static_assert(std::variant_size_v<std::variant<constint,constfloat>>==2);static_assert(std::variant_size_v<std::variant<std::variant<std::any>>>==1); int main(){}

      [edit]See also

      obtains the type of the alternative specified by its index, at compile time
      (class template)(alias template)[edit]
      obtains the size of

      atuple
      (class template specialization)[edit]

      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/variant/variant_size&oldid=176431"

      [8]ページ先頭

      ©2009-2026 Movatter.jp