Namespaces
Variants

std:: variant_size, std:: variant_size_v

From cppreference.net
Utilities library
Défini dans l'en-tête <variant>
template < class T >
struct variant_size ; /* indéfini */
(1) (depuis C++17)
template < class ... Types >

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

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

Fournit un accès au nombre d'alternatives dans un variant potentiellement qualifié cv comme une expression constante à la compilation.

Formellement,

2) satisfait aux UnaryTypeTrait exigences avec une caractéristique de base de std:: integral_constant < std:: size_t , sizeof... ( Types ) >
3-5) satisfait aux UnaryTypeTrait exigences avec une caractéristique de base de std:: integral_constant < std:: size_t , std :: variant_size < T > :: value >

Table des matières

Modèle de variable d'assistance

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

Hérité de std:: integral_constant

Constantes membres

value
[static]
sizeof...(Types)
(constante membre publique statique)

Fonctions membres

operator std::size_t
convertit l'objet en std:: size_t , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Notes

Toutes les spécialisations de std::variant_size satisfont UnaryTypeTrait avec une caractéristique de base std:: integral_constant < std:: size_t , N > pour un certain N .

Exemple

#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() {}

Voir aussi

obtient le type de l'alternative spécifiée par son index, au moment de la compilation
(modèle de classe) (modèle d'alias)
obtient la taille de

un tuple
(spécialisation de modèle de classe)