- variant[meta header]
- std[meta namespace]
- variable[meta id-type]
- cpp17[meta cpp]
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;
}
}
- std::variant_npos[color ff0000]
- v.emplace[link variant/emplace.md]
- v.index()[link variant/index.md]
empty
- C++17
- Clang: 4.0.1 [mark verified]
- GCC: 7.3 [mark verified]
- Visual C++: ??