- variant[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
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;
}
}
- std::holds_alternative[color ff0000]
vはchar型を現在保持している
vはint型を現在保持していない
- C++17
- Clang: 4.0 [mark verified]
- GCC: 7.3 [mark verified]
- ICC: ??
- Visual C++: ??