std::varian...riant_size_v(3)
π NAME π
std::variant_size,std::variant_size_v - std::variant_size,std::variant_size_v
Okay bestie, this is the page for std::variant_size and std::variant_size_v from the C++ Standard Libary β yes, that's the manual name as the header spells it, folded in right here instead of doing a boring copy-paste. It's giving "count the alternatives in a variant, at compile time" energy. β¨
β¨ Synopsis β¨
Defined in header <variant>
template< class T > (1) (since C++17)
struct variant_size; /* undefined */
template< class... Types >
struct variant_size<std::variant<Types...>> (2) (since C++17)
: std::integral_constant<std::size_t, sizeof...(Types)> {};
template< class T > (3) (since C++17)
class variant_size<const T>;
template< class T > (4) (since C++17)
class variant_size<volatile T>;
(deprecated in C++20)
template< class T > (5) (since C++17)
class variant_size<const volatile T>;
(deprecated in C++20)
Okay so what does it actually do? It provides access to the number of alternatives in a possibly cv-qualified variant as a compile-time constant expression. π«Ά
Formally, bestie:
2)meets the UnaryTypeTrait requirements with a base characteristic ofstd::integral_constant<std::size_t, sizeof...(Types)>.3-5)meets the UnaryTypeTrait requirements with a base characteristic ofstd::integral_constant<std::size_t, std::variant_size<T>::value>.
β οΈ Heads up: specializations(4)and(5)are deprecated in C++20. The synopsis says it, and I'm saying it again because we do not ignore deprecation red flags. π
πΈ Member constants πΈ
valueβsizeof...(Types)[static](public static member constant).
π Member functions π
operator std::size_tβ converts the object tostd::size_t, returnsvalue(public member function).operator()β returnsvalue(C++14)(public member function).
π¦ Member types π¦
value_type(under theTypecolumn) β Definition:std::size_t.type(under theTypecolumn) β Definition:std::integral_constant<std::size_t, value>.
β Notes β
All specializations of std::variant_size satisfy UnaryTypeTrait with base characteristic std::integral_constant<std::size_t, N> for some N. No cap. π
π₯ Example π₯
// Run this code
#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() {}
π See also π
variant_alternative,variant_alternative_tβ obtains the type of the alternative specified by its index, at compile time(C++17);variant_alternativeis a class template, andvariant_alternative_tis an alias template.std::tuple_size<std::tuple>β obtains the size of tuple at compile time(C++11)(class template specialization).
β signed with glitter and good vibes, from http://cppreference.com, version 2024.06.10, on the std::varian...riant_size_v(3) page π«Άππ
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms