不能variant.index()
在 constexpr 语句中使用,因此需要迭代变体并返回true
,如果它可以转换为某种类型,或者false
它是 emtpy 或包含零值。试试这个代码,但似乎索引序列不是可变参数类型并且 ... 运算符在这种情况下不可用。
template <typename T>
bool has_value(T value) noexcept {
if constexpr (std::is_convertible_v <T, bool>) {
return value;
}
else if constexpr (is_variant_v<T>) {
constexpr size_t N = std::variant_size_v<decltype(value)>;
using variant_sequence = typename std::make_index_sequence<0, N-1>::type;
bool __has_value = (( std::get<variant_sequence>(value), true) || variant_sequence... ) ;
return __has_value;
}
return false;
}