Namespaces
Variants

std:: variant_size, std:: variant_size_v

From cppreference.net
Utilities library
Definido en el encabezado <variant>
template < class T >
struct variant_size ; /* indefinido */
(1) (desde C++17)
template < class ... Types >

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

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

Proporciona acceso al número de alternativas en una variante posiblemente calificada con cv como una expresión constante en tiempo de compilación.

Formalmente,

2) cumple con los UnaryTypeTrait requisitos con una característica base de std:: integral_constant < std:: size_t , sizeof... ( Types ) >
3-5) cumple con los requisitos de UnaryTypeTrait con una característica base de std:: integral_constant < std:: size_t , std :: variant_size < T > :: value >

Contenidos

Plantilla de variable auxiliar

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

Heredado de std:: integral_constant

Constantes miembro

value
[static]
sizeof...(Types)
(constante miembro pública estática)

Funciones miembro

operator std::size_t
convierte el objeto a std:: size_t , devuelve value
(función miembro pública)
operator()
(C++14)
devuelve value
(función miembro pública)

Tipos miembro

Tipo Definición
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Notas

Todas las especializaciones de std::variant_size satisfacen UnaryTypeTrait con característica base std:: integral_constant < std:: size_t , N > para algún N .

Ejemplo

#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<const int, const float>> == 2);
static_assert(std::variant_size_v<std::variant<std::variant<std::any>>> == 1);
int main() {}

Véase también

obtiene el tipo de la alternativa especificada por su índice, en tiempo de compilación
(plantilla de clase) (plantilla de alias)
obtiene el tamaño de

un tuple
(especialización de plantilla de clase)