std::indirect_unary_predicate
Определён в заголовке <iterator> | ||
|---|---|---|
template< class F, class I >
concept indirect_unary_predicate =
std::indirectly_readable<I> &&
std::copy_constructible<F> &&
std::predicate<F&, /*indirect-value-t*/<I>> &&
std::predicate<F&, std::iter_reference_t<I>>;
| (начиная с C++20) |
Определение /*indirect-value-t*/ см. на этой странице.
Концепт indirect_unary_predicate задаёт требования к алгоритмам, которые вызывают унарные предикаты в качестве аргументов. Ключевое отличие этого концепта от std::predicate заключается в том, что он применяется к типу, на который ссылается I, а не к самому I.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| P2609R3 | C++20 | одно из требований было задано через std::iter_value_t<I>& что приводило к некорректной обработке проекций и несовместимости с предикатом F& | задано через /*indirect-value-t*/<I> для корректной обработки таких проекций |
| P2997R1 | C++20 |
indirect_unary_predicate требовал, чтобы F& удовлетворялpredicate с std::iter_common_reference_t<I> | не требует |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/indirect_unary_predicate