Есть ли у нас библиотека диапазонов C ++ 20 в GCC 9? - PullRequest
21 голосов
/ 13 мая 2019

Есть ли у нас поддержка библиотеки диапазонов C ++ 20 во вновь выпущенном GCC 9?

Я скопировал приведенный ниже пример кода для библиотеки диапазонов из: https://en.cppreference.com/w/cpp/ranges

#include <vector>
#include <ranges>
#include <iostream>

int main()
{
  std::vector<int> ints{0,1,2,3,4,5};
  auto even = [](int i){ return 0 == i % 2; };
  auto square = [](int i) { return i * i; };

  for (int i : ints | std::view::filter(even) | std::view::transform(square)) {
    std::cout << i << ' ';
  }
}

Но при компиляции с g ++ 9.1 (Ubuntu 18.04 LTS (Bionic Beaver)) он жалуется, что <ranges> не может быть найден:

$ g++ -std=c++2a cpp2a.cpp 
cpp2a.cpp:2:10: fatal error: ranges: No such file or directory
    2 | #include <ranges>
      |          ^~~~~~~~
compilation terminated.

Я что-то упустил?

И появится ли библиотека диапазонов в какой-то момент времени с серией GCC 9?

Ответы [ 2 ]

17 голосов
/ 13 мая 2019

Я что-то упустил?

номер

И появится ли библиотека диапазонов в какой-то момент времени с серией gcc-9?

Это возможно, но кажется маловероятным.

<ч />

Ranges - это огромная библиотека. Это все еще 2019 год, официальный стандарт C ++ 20 все еще не будет отправлен в течение еще полутора лет. Это займет некоторое время, чтобы это было реализовано в основных реализациях стандартной библиотеки. Нам просто нужно подождать.

Если вы хотите начать использовать диапазоны, вы можете использовать Range-v3 (в частности, ветку v1.0-beta) или вы можете найти реализацию C ++ 20 Ranges в cmcstl2 (это реализация Кейси Таинственный Картер).

Вы также можете периодически проверять cppreference страницу отслеживания компилятора / библиотеки (что неудивительно, что в настоящее время нет библиотек, в которых реализовано предложение One Ranges, но, тем не менее, показывает довольно много функций C ++ 20, которые были реализованы различными поставщиками библиотек).

9 голосов
/ 13 мая 2019

за Таблица 1.7. Состояние реализации C ++ 2020

Одно предложение P0896R4

не помечен версией. Это означает, что он еще не был реализован ни в одной версии GCC.

...