ССЗпредставление фильтра не компилируется с бесконечным диапазоном iota () - PullRequest
0 голосов
/ 24 декабря 2018

Я изучаю реализацию библиотеки экспериментальных диапазонов в gcc.При объединении бесконечного диапазона йоты с представлением фильтра я получил удивительную ошибку компиляции ( живой пример с GCC 9.0 HEAD 201812):

#include <iostream> 
#include <vector>
#include <experimental/ranges/range>

int main()
{
  using namespace std::experimental::ranges;
  auto odds = view::filter([](int x){ return x%2 != 0; });

  // auto v = std::vector{0,1,2,3,4,5};
  // auto x = v | odds; // (1) ok
  // auto x = view::iota(0,6) | odds; // (2) ok
  // auto x = view::iota(0) | view::take(6); // (3) ok
  auto x = view::iota(0) | view::take(6) | odds; // (4) error: sentinel?

  for (auto e : x) std::cout << e << ' ';
}

Что здесь не так?

1 Ответ

0 голосов
/ 25 декабря 2018

Это просто ошибка в cmcstl2.Коротко воспроизведенный пример:

auto yes = [](int){ return true; };
// this works
view::filter(view::iota(0), yes);
view::iota(0,10) | view::filter(yes);
// this doesn't 
view::iota(0) | view::filter(yes);

Кейси уже исправила это в этом PR (в частности этом коммите ).

...