namespace std {
template <class T, class... Types>
constexpr bool holds_alternative(const variant<Types...>& x) noexcept;
}
概要
variant
オブジェクトが指定の候補型を現在保持しているかを判定する。
要件
- 型
T
がTypes...
内に一度だけ現れること。そうでない場合、プログラムは不適格となる
戻り値
型T
のTypes...
でのインデックスとx.index()
が等値である場合にtrue
を返し、そうでなければfalse
を返す。
例
#include <iostream>
#include <variant>
int main()
{
std::variant<int, char, double> v = 'a';
if (std::holds_alternative<char>(v)) {
std::cout << "vはchar型を現在保持している" << std::endl;
}
if (!std::holds_alternative<int>(v)) {
std::cout << "vはint型を現在保持していない" << std::endl;
}
}
16
#include <iostream>
#include <variant>
int main()
{
std::variant<int, char, double> v = 'a';
if (std::holds_alternative<char>(v)) {
std::cout << "vはchar型を現在保持している" << std::endl;
}
if (!std::holds_alternative<int>(v)) {
std::cout << "vはint型を現在保持していない" << std::endl;
}
}
出力
vはchar型を現在保持している
vはint型を現在保持していない
バージョン
言語
- C++17
処理系
- Clang: 4.0 ✅
- GCC: 7.3 ✅
- ICC: ??
- Visual C++: ??