我们是否支持新发布的 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 (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 系列一起出现吗?
原文由 thor 发布,翻译遵循 CC BY-SA 4.0 许可协议
不。
这是可能的,但似乎不太可能。这没有发生。在 gcc 中支持 Ranges 的第一个版本是 gcc 10.1。
Ranges 是一个 巨大的 图书馆。现在还是 2019 年,官方的 C++20 标准还要再过一年半才能发布。它需要一段时间才能在主要的标准库实现中实现。我们只需要等待。
如果您想开始使用 Ranges,您可以使用 Range-v3 (特别是
v1.0-beta
分支),或者您可以在 cmcstl2 找到 C++20 Ranges 的实现(这是 Casey Mysterious Carter 的实现)。您还可以定期检查 cppreference 的 编译器/库跟踪页面(在撰写本文时,该页面显示没有库实现了 One Ranges 提案,但确实显示了许多 C++20 功能已由各个库供应商实现) .