- 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++: ??