Почему в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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