[variant.helper] # 22 General utilities library [[utilities]](./#utilities) ## 22.6 Variants [[variant]](variant#helper) ### 22.6.4 variant helper classes [variant.helper] [🔗](#lib:variant_size) `template struct variant_size; ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L6456) All specializations of variant_size meet the[*Cpp17UnaryTypeTrait*](meta.rqmts#:Cpp17UnaryTypeTrait "21.3.2 Requirements [meta.rqmts]") requirements ([[meta.rqmts]](meta.rqmts "21.3.2 Requirements")) with a base characteristic of integral_constant for some N[.](#1.sentence-1) [🔗](#lib:variant_size_) `template struct variant_size; ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L6468) Let VS denote variant_size of the cv-unqualified type T[.](#2.sentence-1) Then each specialization of the template meets the[*Cpp17UnaryTypeTrait*](meta.rqmts#:Cpp17UnaryTypeTrait "21.3.2 Requirements [meta.rqmts]") requirements ([[meta.rqmts]](meta.rqmts "21.3.2 Requirements")) with a base characteristic of integral_constant[.](#2.sentence-2) [🔗](#lib:variant_size__) `template struct variant_size> : integral_constant { }; ` [🔗](#lib:variant_alternative) `template struct variant_alternative; ` [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L6488) Let VA denote variant_alternative of the cv-unqualified type T[.](#3.sentence-1) Then each specialization of the template meets the [*Cpp17TransformationTrait*](meta.rqmts#:Cpp17TransformationTrait "21.3.2 Requirements [meta.rqmts]") requirements ([[meta.rqmts]](meta.rqmts "21.3.2 Requirements")) with a member typedef type that names the type add_const_t[.](#3.sentence-2) [🔗](#lib:variant_alternative_) `variant_alternative>::type ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L6501) *Mandates*: I < sizeof...(Types)[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/utilities.tex#L6505) *Type*: The type TI[.](#5.sentence-1)