std::variant_size, std::variant_size_v
From cppreference.com
| ヘッダ <variant> で定義 |
||
| template< class T > struct variant_size; /* 未定義 */ |
(1) | (C++17以降) |
| template< class... Types > struct variant_size<std::variant<Types...>> |
(2) | (C++17以降) |
| template< class T > class variant_size<const T>; |
(3) | (C++17以降) |
| template< class T > class variant_size<volatile T>; |
(4) | (C++17以降) (C++20で非推奨) |
| template< class T > class variant_size<const volatile T>; |
(5) | (C++17以降) (C++20で非推奨) |
cv修飾される可能性のあるvariantの代替の数を、コンパイル時定数式として提供します。
正式には、
3-5) std::integral_constant<std::size_t, std::variant_size<T>::value>の基本特性を持つ、UnaryTypeTrait の要件を満たします。
目次 |
[編集] ヘルパー変数テンプレート
| template< class T > constexpr std::size_t variant_size_v = std::variant_size<T>::value; |
(C++17以降) | |
std::integral_constant から継承
メンバ定数
| value [static] |
sizeof...(Types) (公開静的メンバ定数) |
メンバ関数
| operator std::size_t |
オブジェクトを std::size_t に変換し、value を返します。 (public member function) |
| operator() (C++14) |
value を返します。 (public member function) |
メンバ型
| 型 | 定義 |
value_type
|
std::size_t |
type
|
std::integral_constant<std::size_t, value> |
[編集] 注意
std::variant_size のすべての特殊化は、ある N に対して 基本特性 std::integral_constant<std::size_t, N> を持つ UnaryTypeTrait を満たします。
[編集] 例
このコードを実行
#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() {}
[編集] 関連項目
| コンパイル時にインデックスで指定された代替型の型を取得する (class template) (alias template) | |
| (C++11) |
のサイズを取得する
|