Spec-Zone.ru › C++

indirectly-binary-left-foldable, indirectly-binary-right-foldable

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) (начиная с C++23)
(только для экспозиции*)
template< class F, class T, class I >
concept /*indirectly-binary-right-foldable*/ =
    /*indirectly-binary-left-foldable*/</*flipped*/<F>, T, I>;
(2) (начиная с C++23)
(только для экспозиции*)
Вспомогательные концепты
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) (начиная с C++23)
(только для экспозиции*)
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) (начиная с C++23)
(только для экспозиции*)
1) Экспозиционный концепт indirectly-binary-left-foldable используется алгоритмами свёртки влево для ограничения параметра шаблона объекта-функции.
2) Экспозиционный концепт indirectly-binary-right-foldable используется алгоритмами свёртки вправо для ограничения параметра шаблона объекта-функции.

См. также

ranges::fold_left
(C++23)
выполняет свёртку диапазона элементов влево
(объект-функция алгоритма)
ranges::fold_left_with_iter
(C++23)
выполняет свёртку диапазона элементов влево и возвращает пару (итератор, значение)
(объект-функция алгоритма)
ranges::fold_left_first
(C++23)
выполняет свёртку диапазона элементов влево, используя первый элемент в качестве начального значения
(объект-функция алгоритма)
ranges::fold_left_first_with_iter
(C++23)
выполняет свёртку диапазона элементов влево, используя первый элемент в качестве начального значения, и возвращает пару (итератор, optional)
(объект-функция алгоритма)
ranges::fold_right
(C++23)
выполняет свёртку диапазона элементов вправо
(объект-функция алгоритма)
ranges::fold_right_last
(C++23)
выполняет свёртку диапазона элементов вправо, используя последний элемент в качестве начального значения
(объект-функция алгоритма)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/algorithm/ranges/fold_concepts

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API