<algorithm> который можно использовать в constexpr

yndx-antoshkka
yndx-antoshkka

Алгоритмы не используещие swap помечаются как constexpr тут

Оставшиеся алгоримы, использующие swap, помечаются как constexpr тут

7
рейтинг
сделано в РГ21
C++20
2 комментария
Andrey Davydov

Общий вопрос: насколько актуально менять функции из <algorithm> сейчас, а не ждать нового дивного std2 с ranges? Мне не нравится, то что сейчас функции принимающие пару итераторов ожидают, что они будут одного типа, в то время как для range-based for loop разрешили begin-, end-итераторам быть разного типа. В результате в C++17 для некоторых своих классов я могу написать

int sum(Range && range) {
  int res = 0;
  for (int i : range)
    res += i;
  return i;
}

но не могу

int sum(Range && range) {
  return std::accumulate(range.begin(), range.end(), 0);
}

В Ranges TS я знаю эта проблема исправлена, а на сколько, как Вы считатете, актуально было бы исправлять 

template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );

на 

template< class InputIt, class Sentinel, class T >
T accumulate( InputIt first, Sentinel last, T init );

в С++20?

Andrey Davydov
yndx-antoshkka

Вы подняли много интресных вопросов:

У меня есть необоснованный страх, что Ranges не успеют попасть в C++20. Поэтому constexpr добавляю к существующему <algorithm>. Однако, надо такие же constexpr добавить и для Ranges. Займусь этим в скором времени.

Исправлять имеющиеся алгоритмы не опираясь на Ranges комитет точно не будет. Это огромная работа и такое исправление будет дублировать работу по Ranges. В итоге просто оба предложения замедлятся.

Интереснее другое: можно ли Ranges влить в namespace std, чтобы существующий код начал использовать Ranges из коробки, а алгоритмы не дублировались в двух разных namespace. Задам этот фопрос авторам Ranges.

yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения