Подтвердить что ты не робот

Почему std::накопить не было сделано constexpr в С++ 20?

В С++ 20 было создано много (большинство?) С++ - стандартных библиотечных алгоритмов constexpr. Тем не менее - std::accumulate не имеет.

кажется, что это могло быть:

template<class InputIt, class T>
constexpr T accumulate(InputIt first, InputIt last, T init)
{
    for (; first != last; ++first) {
        init = std::move(init) + *first;
    }
    return init;
}

Итак - есть ли причина, по которой он не был constexpr также издан?

Примечание. Этот вопрос был мотивирован моим ответом на этот вопрос о накоплении во время компиляции.

4b9b3361

Ответ 1

TL; DR;

Есть предложение в процессе. Мы не узнаем результат, пока процесс не будет завершен, но он не сделает С++ 20.

Более длинный ответ

Действительно было предложение: constexpr для алгоритмов, цитируя соответствующую часть:

Это предложение заключается в добавлении constexpr в следующие шаблоны функций, за исключением шаблонов функций, которые принимают ExecutionPolicy.

  • накапливают

...

Из cplusplus/documents выпуск 432 мы видим, что документ был перемещен в рабочую группу Language Evolution:

R0, должен просматриваться/пересылаться LEWG. Удаление тега LWG.

и веха была перенесена в 2019-11:

modified the milestones: 2019-07, 2019-11

что будет предстоящей встречей в Белфасте, так что это не сделает С++ 20.