std::indirectly_readable
Определён в заголовочном файле <iterator> | ||
|---|---|---|
template< class In >
concept __IndirectlyReadableImpl =
requires(const In in) {
typename std::iter_value_t<In>;
typename std::iter_reference_t<In>;
typename std::iter_rvalue_reference_t<In>;
{ *in } -> std::same_as<std::iter_reference_t<In>>;
{ ranges::iter_move(in) } -> std::same_as<std::iter_rvalue_reference_t<In>>;
} &&
std::common_reference_with<
std::iter_reference_t<In>&&, std::iter_value_t<In>&
> &&
std::common_reference_with<
std::iter_reference_t<In>&&, std::iter_rvalue_reference_t<In>&&
> &&
std::common_reference_with<
std::iter_rvalue_reference_t<In>&&, const std::iter_value_t<In>&
>;
| (только для иллюстрации*) | |
template< class In >
concept indirectly_readable =
__IndirectlyReadableImpl<std::remove_cvref_t<In>>;
| (начиная с C++20) |
Концепция indirectly_readable моделируется типами, из которых можно считывать значения с помощью operator*, например указателями, интеллектуальными указателями и входными итераторами.
Семантические требования
При заданном значении i типа I, I моделирует indirectly_readable только в том случае, если все включаемые ею концепции моделируются, а выражение *i сохраняет равенство.
Сохранение равенства
Выражения, объявленные в выражениях requires концепций стандартной библиотеки, должны сохранять равенство (если не указано иное).
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/indirectly_readable