namespace std {
inline constexpr std::size_t variant_npos = -1;
}
概要
variant_npos
は、候補型の無効なインデックス値を表す定数である。
std::variant
クラスは、0番目の候補型でデフォルト構築するため、通常の操作ではどの型も代入されない状態にはならない。ただし、valueless_by_exception()
メンバ関数がtrue
を返す例外的な状況ではどの型も代入されていない状態になる。
そのような状況で、index()
メンバ関数がこの値を返すようになる。
例
#include <iostream>
#include <variant>
struct S { operator int() { throw 42; }};
int main()
{
std::variant<float, int> v = 12.f;
try {
v.emplace<1>(S());
}
catch (...) {}
if (v.index() == std::variant_npos) {
std::cout << "empty" << std::endl;
}
else {
std::cout << "not empty" << std::endl;
}
}
21
#include <iostream>
#include <variant>
struct S { operator int() { throw 42; }};
int main()
{
std::variant<float, int> v = 12.f;
try {
v.emplace<1>(S());
}
catch (...) {}
if (v.index() == std::variant_npos) {
std::cout << "empty" << std::endl;
}
else {
std::cout << "not empty" << std::endl;
出力
empty
バージョン
言語
- C++17
処理系
- Clang: 4.0.1 ✅
- GCC: 7.3 ✅
- Visual C++: ??