我们在GCC 9中有C ++ 20范围库吗?

时间:2019-05-13 19:44:47

标签: c++ gcc c++20

我们在新发布的GCC 9中是否支持C ++ 20范围库?

我从以下位置复制了范围库的示例代码: 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(仿生海狸))进行编译时,它抱怨找不到<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系列中,范围库会在某个时间到达吗?

4 个答案:

答案 0 :(得分:15)

  

我想念什么吗?

否。

  

gcc-9系列的范围库会在某个时间到达吗?

可能,但似乎不太可能。


范围是一个巨大的库。仍然是2019年,官方的C ++ 20标准甚至还要再过一年半才会发布。它需要一段时间才能在主要的标准库实现中实现。我们只需要等待。

如果您想开始使用Ranges,可以使用Range-v3(特别是library(rvest) base <- "https://coinatmradar.com/city/345/bitcoin-atm-birmingham-uk/" base_read <- read_html(base) atm_urls <- html_nodes(base_read, ".place > a") all_urls_final <- html_attr(atm_urls, "href" ) print(all_urls_final) 分支),也可以在cmcstl2找到C ++ 20 Ranges的实现(这是Casey Mysterious Carter的实现)。

您还可以定期检查cppreference的compiler/library tracking page(毫不奇怪,当前没有任何库实现了One Ranges提案,但是确实显示了许多库供应商已经实现的许多C ++ 20功能)

答案 1 :(得分:9)

Table 1.7. C++ 2020 Implementation Status

  

一个范围建议P0896R4

未标记版本。这意味着它尚未在任何版本的GCC中实现。

答案 2 :(得分:8)

g ++ 10支持<ranges>功能和number of other c++20 features

#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::views::filter(even) | std::views::transform(square)) {
    std::cout << i << ' ';
  }
}

$ g++-10 -Wall -Wextra -std=c++20 ranges.cpp 
$ ./a.out 
0 4 16

在Ubuntu上,这些软件包现已可用。要安装:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt install gcc-10 g++-10

但是,g ++-10不支持 all 所有功能。有关受支持的功能列表,请参见Table 1.8. C++ 2020 Library Features

答案 3 :(得分:3)

GCC 10已于3月稳定发布(带有version update 10.1 on May 7, 2020)。

此版本支持ranges

compiler/library tracking page也是最新的。

因此您的代码示例*会编译:https://godbolt.org/z/MPxBMs

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

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

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

*:由于名称空间别名是std::views而不是std::view,因此有一个小的修正。

我通过在macOS上手动编译 的本地安装进行了测试。

g++-10.1 -std=c++20 -Wall test.cpp