Re[6]: std::views::filter и const
От: Chorkov Россия  
Дата: 01.12.20 15:31
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, Chorkov, Вы писали:


C>>Как ни странно, take — работает: https://wandbox.org/permlink/Y74CJT4bN1PFMRRF,

C>>а filter — нет: https://wandbox.org/permlink/aI2gSYhTIwn36BiX

S>В реализации take_view видны две версии end(): одна для случая сложного вложенного view, вторая для случая простого view

S>https://github.com/gcc-mirror/gcc/blob/d66db7412ee8e16e08b340767f4c00a3b570e730/libstdc%2B%2B-v3/include/std/ranges#L1763-L1789
S>Когда задействуется filter_view, то выбирается неконстантный end, т.к. filter_view, видимо, к простым view не относится.

S>Я удивлен тому, что для простого, но неограниченного в размере, view выбирается константный end. Там же вроде как тоже надо считать количество извлеченных элементов.


Счетчик должен находиться в итераторе, а не во view.
Иначе, нельзя иметь два итератора к одной view:
    const auto odds =std::views::iota(1)  | std::views::take(3);
    for(const auto i: odds1) 
        for(const auto j: odds1) 
            std::cout << i << j << std::endl;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.