Namespaces
Variants

std::variant_size, std::variant_size_v

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
Definido en el encabezado <variant>
template< class T >
struct variant_size; /* undefined */
(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 un variant posiblemente cv-cualificado como una expresión constante en tiempo de compilación.

Formalmente,

2) cumple con los requisitos de UnaryTypeTrait 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>

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)