Почему std :: накопить не было сделано constexpr в C ++ 20? - PullRequest
19 голосов
/ 19 сентября 2019

В C ++ 20 было сделано много (большинство?) Алгоритмов C ++ - стандартной библиотеки 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

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

1 Ответ

1 голос
/ 21 сентября 2019

TL; DR;

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

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

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

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

  • накопить

...

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

R0, необходимо просмотреть / переслать LEWG.При удалении тега LWG.

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

изменила вехи: 2019-07, 2019-11

, что было бы предстоящим Белфастским собранием , поэтому он не сделает C ++ 20.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...