Espacios de nombres
Variantes

std::variant_size, std::variant_size_v

De cppreference.com
 
 
Biblioteca de servicios
Apoyo del lenguaje
Apoyo de tipos (tipos básicos, RTTI)
Macros de prueba de característica de la biblioteca (C++20)
Servicios de programa
Funciones variádicas
Apoyo de corrutinas (C++20)
Apoyo de contratos (C++26)
Comparación de tres vías (C++20)
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

 
 
Definido en el archivo de encabezado <variant>
template <class T>
struct variant_size; /* sin definir */
(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>;
template <class T> class variant_size<const volatile T>;
(3) (desde C++17)
(en desuso en C++20)

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

Formalmente,

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

Plantilla de variable auxiliar

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

Heredado de std::integral_constant

Constantes miembro

value
[estático]
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 a UnaryTypeTrait con una característica de base std::integral_constant<std::size_t, N> para algunas N.

Ejemplo

#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("Pasaron todas las aserciones estáticas."); }

Salida:

Pasaron todas las aserciones estáticas.

Véase también

Obtiene el tipo de la alternativa dado su subíndice, en tiempo de compilación.
(plantilla de clase) (plantilla de alias) [editar]
Obtiene el tamaño de una tupla en tiempo de compilación.
(especialización de plantilla de clase) [editar]