indirectly-binary-left-foldable, indirectly-binary-right-foldable
From cppreference.com
template< class F, class T, class I >
concept /*indirectly-binary-left-foldable*/ =
std::copy_constructible<F> &&
std::indirectly_readable<I> &&
std::invocable<F&, T, std::iter_reference_t<I>> &&
std::convertible_to<std::invoke_result_t
<F&, T, std::iter_reference_t<I>>,
std::decay_t<std::invoke_result_t<F&, T, std::iter_reference_t<I>>>> &&
/*indirectly-binary-left-foldable-impl*/
<F, T, I,
std::decay_t<std::invoke_result_t<F&, T, std::iter_reference_t<I>>>>;
|
(1) | (since C++23) (exposition only*) |
template< class F, class T, class I >
concept /*indirectly-binary-right-foldable*/ =
/*indirectly-binary-left-foldable*/</*flipped*/<F>, T, I>;
|
(2) | (since C++23) (exposition only*) |
| Helper concepts |
||
template< class F, class T, class I, class U >
concept /*indirectly-binary-left-foldable-impl*/ =
std::movable<T> &&
std::movable<U> &&
std::convertible_to<T, U> &&
std::invocable<F&, U, std::iter_reference_t<I>> &&
std::assignable_from
<U&, std::invoke_result_t<F&, U, std::iter_reference_t<I>>>;
|
(3) | (since C++23) (exposition only*) |
template< class F >
class /*flipped*/
{
F f; // exposition only
public:
template< class T, class U >
requires std::invocable<F&, U, T>
std::invoke_result_t<F&, U, T> operator()( T&&, U&& );
};
|
(4) | (since C++23) (exposition only*) |
1) The exposition-only concept
indirectly-binary-left-foldable is used by left-folding algorithms to constrain the function object template parameter.2) The exposition-only concept
indirectly-binary-right-foldable is used by right-folding algorithms to constrain the function object template parameter.See also
(C++23) |
left-folds a range of elements (algorithm function object) |
(C++23) |
left-folds a range of elements, and returns a pair (iterator, value) (algorithm function object) |
(C++23) |
left-folds a range of elements using the first element as an initial value (algorithm function object) |
| left-folds a range of elements using the first element as an initial value, and returns a pair (iterator, optional) (algorithm function object) | |
(C++23) |
right-folds a range of elements (algorithm function object) |
(C++23) |
right-folds a range of elements using the last element as an initial value (algorithm function object) |