Здравствуйте, 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;