78 template<
typename... Ts>
89 template<
typename VariantT,
typename U, std::size_t... I>
92 return ((std::is_same_v<
93 std::remove_cvref_t<U>,
94 std::remove_cvref_t<std::variant_alternative_t<I, VariantT>>
103 template<
typename VariantT,
typename U>
105 variant_has_type_impl<VariantT, U>(
106 std::make_index_sequence<std::variant_size_v<VariantT>>()
134 requires {
typename T::value_type; } &&
135 std::same_as<T, std::optional<typename T::value_type>>;
147 concept Variant = Detail::is_variant_v<std::remove_cvref_t<T>>;
160 template<
typename T,
typename U>
163 Detail::variant_has_type_v<std::remove_cvref_t<T>, U>;
Exactly std::optional<U> for some U.
Definition wrappers.hxx:133
Type with accessible first and second members.
Definition wrappers.hxx:185
StormByte::Type::Variant T that lists U among its alternatives.
Definition wrappers.hxx:161
Instantiation of std::variant, after stripping cv and references.
Definition wrappers.hxx:147
constexpr bool variant_has_type_impl(std::index_sequence< I... > seq) noexcept
Fold: is stripped U one of VariantT's alternatives?
Definition wrappers.hxx:90
constexpr bool variant_has_type_v
Convenience wrapper around StormByte::Type::Detail::variant_has_type_impl.
Definition wrappers.hxx:104
constexpr bool is_variant_v
true when T is exactly std::variant after stripping cv and references.
Definition wrappers.hxx:72
Root namespace of the StormByte suite.
Octet count. Defined in byte_size.hxx. Forwarded so Type::Numeral can name it.