std:: variant_size, std:: variant_size_v
|
定義済みヘッダー
<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で非推奨) |
修飾指定子(const/volatile)が適用されている可能性のあるvariant内の代替案の数へのアクセスを、コンパイル時定数式として提供します。
形式的には、
目次 |
ヘルパー変数テンプレート
|
template
<
class
T
>
constexpr std:: size_t variant_size_v = std :: variant_size < T > :: value ; |
(C++17以降) | |
std::integral_constantから継承
メンバ定数
|
value
[static]
|
sizeof...(Types)
(public static member constant) |
メンバ関数
|
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
のすべての特殊化は、
UnaryTypeTrait
を満たし、
base characteristic
は
std::
integral_constant
<
std::
size_t
, N
>
となる(
N
は何らかの値)。
例
#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() {}
関連項目
|
指定されたインデックスの代替型をコンパイル時に取得する
(クラステンプレート) (エイリアステンプレート) |
|
|
(C++11)
|
以下のサイズを取得する
|