cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Общий интерефейс компайл тайм sized контейнеров #511

Closed kelbon closed 2 years ago

kelbon commented 2 years ago

В стародавние времена по неизвестной никому причине у std::array метод size не сделали static. Что конечно ломает ожидания человека, который логически предполагает, что узнать размер массива можно и без объекта такого массива( особенно в шаблонном коде ) Для std:;array есть кривое решение - специализация std::tuple_size_v. А вот для std::span и метод size не static и специализации tuple_size_v нет. Зато есть какой то бесполезный static constexpr size_t extent; Предлагаю депрекейтнуть этот extent нахрен, добавить специализацию tuple_size_v для std::span<T, I> и "удалённую" специализацию для std::span<T, std::dynamic_extent>; Добавление static не предлагаю т.к. разоруться представители ABI, Получим общий интерфейс для похожих вещей, оправдаются ожидания новичков, которые думают что можно без объекта класса у которого размер записан в типе получить его размер(без заморочек)

AndreyG commented 2 years ago

Это уже принято: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1024r3.pdf.