Почему в C++23 диапазоны::не ограничивают тип контейнера C диапазоном?C++

Программы на C++. Форум разработчиков
Anonymous
Почему в C++23 диапазоны::не ограничивают тип контейнера C диапазоном?

Сообщение Anonymous »

В C++23 представлены очень мощные возможности ranges::to для создания объекта (обычно контейнера) из диапазона со следующим определением ([range.utility.conv.to]):

Код: Выделить всё

template requires (!view)
constexpr C to(R&& r, Args&&... args);
Обратите внимание, что параметр шаблона C ограничивается только тем, чтобы он не был представлением, то есть C может даже не быть диапазоном code>.
Однако его реализация использует range_value_t для получения типа элемента C, что делает C как минимум диапазоном с учетом ограничения range_value_t, что параметр шаблона R должен моделировать диапазон.
Итак, почему диапазоны::to так слабо ограничены параметром шаблона C?
Я заметил, что версия статьи R3 ограничивала C значением input_range, что, очевидно, было разумным, поскольку input_range гарантировал, что range_value_t был правильно сформирован, но в R4 это ограничение было удаленный. И я не нашел комментариев по поводу этого изменения.
Итак, каковы соображения по поводу удаления ограничения, согласно которому C должен быть input_range?
Есть ли практический пример преимуществ такого ослабления ограничений?

Подробнее здесь: https://stackoverflow.com/questions/737 ... be-a-range

Вернуться в «C++»