33concept c_readable =
requires(T value, std::istream& input_stream) { input_stream >> value; };
49concept c_writable =
requires(T value, std::ostream& output_stream) { output_stream << value; };
66 std::same_as<T, ap::none_type>
75template <
typename T,
typename... Types>
76concept c_one_of = std::disjunction_v<std::is_same<T, Types>...>;
98template <
typename T,
typename U, type_val
idator TV>
107template <
typename T,
typename U>
108inline constexpr bool is_valid_type_v<T, U, type_validator::same> = std::same_as<T, U>;
116template <
typename T,
typename U>
117inline constexpr bool is_valid_type_v<T, U, type_validator::convertible> =
118 std::convertible_to<T, U>;
127template <
typename T,
typename U, type_val
idator TV = type_val
idator::same>
137template <
typename R,
typename V, type_val
idator TV = type_val
idator::same>
139 std::ranges::range<R>
149template <
typename R,
typename V, type_val
idator TV = type_val
idator::same>
151 std::ranges::range<R>
161template <
typename It,
typename V, type_val
idator TV = type_val
idator::same>