std::variant_size, std::variant_size_v
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    |   定义于头文件  <variant>
  | 
||
|   template <class T> struct variant_size; /* undefined */  | 
(1) | (C++17 起) | 
|   template <class... Types> struct variant_size<std::variant<Types...>>  | 
(2) | (C++17 起) | 
|   template <class T> class variant_size<const T>;  | 
(3) | (C++17 起) | 
|   template <class T> class variant_size<volatile T>; template <class T> class variant_size<const volatile T>;  | 
(3) |  (C++17 起)  (C++20 中弃用)  | 
提供作为编译时常量表达式,对可有 cv 限定的 variant 中可选项数量的访问。 
正式地,
辅助变量模板
|   template <class T> inline constexpr std::size_t variant_size_v = std::variant_size<T>::value;  | 
(C++17 起) | |
继承自 std::integral_constant
成员常量
|    value [静态]  | 
    sizeof...(Types)   (公开静态成员常量)  | 
成员函数
|    operator std::size_t  | 
   转换对象为 std::size_t ,返回 value  (公开成员函数)  | 
|    operator() (C++14)  | 
   返回 value  (公开成员函数)  | 
成员类型
| 类型 | 定义 | 
  value_type
 | 
  std::size_t
 | 
  type
 | 
std::integral_constant<std::size_t, value> | 
注解
所有 std::variant_size 的特化都满足以某些 N 的 std::integral_constant<std::size_t, N> 为基特征的一元类型特征 (UnaryTypeTrait) 。
示例
运行此代码
#include <any> #include <cstdio> #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<const int, const float>> == 2); static_assert(std::variant_size_v<std::variant<std::variant<std::any>>> == 1); int main() { std::puts("All static assertions passed."); }
输出:
All static assertions passed.
参阅
|    在编译时获得以其下标指定的可选项的类型   (类模板) (别名模板)  | |
  在编译时获得 tuple 的大小 (类模板特化)  |