找不到标头`execution`和`std::reduce`
Posted
技术标签:
【中文标题】找不到标头`execution`和`std::reduce`【英文标题】:Header `execution` and `std::reduce` not found 【发布时间】:2017-04-28 21:56:38 【问题描述】:我正在尝试让这个 sn-p 编译
#include <vector>
#include <numeric>
#include <execution>
double result = std::reduce(std::execution::par, v.begin(), v.end());
我尝试了这些编译器:
Apple LLVM version 8.1.0 (clang-802.0.42)
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
三个都给我'execution' file not found
分别error: no member named 'reduce' in namespace 'std'
auto result = std::reduce(v.begin(), v.end());
对于这个sn-p
#include<numeric>
#include<vector>
int main(int argc, char *argv[])
std::vector<double> v(10, 1);
auto result = std::reduce(v.begin(), v.end());
return 0;
我猜我的编译器太旧了?但是on cppreference 并没有说明最低要求哪个编译器版本,而且我在 repo 中没有看到任何更新的 clang 或 gcc 版本。
【问题讨论】:
如果你检查libc++ status page,你会看到大部分(没有?)并行执行的东西已经实现了。 嗯,好的,cppreference 上没这么说。 "...关于 cppreference 它没有说明哪个编译器版本..." - cppreference 很少提及特定的编译器工具链。相反,它表示语言 和标准库要求。这个案子也不例外。 “(自 C++17 起)”告诉您使用的任何工具链必须支持什么。 两年后(2019 年 4 月)仍然不支持 libc++,也不支持 libstdc++。野兽有它,真可惜。 【参考方案1】:std::reduce
和 std::execution::par
从 C++17 开始可用。
对于大多数编译器,C++17 还没有完全实现。您可以尝试使用带有标志-std=c++1z
的clang。
【讨论】:
当心。如果使用系统 libstdc++ 而不是 libc++,您仍然可能会遇到 clang++ 错误。 @rwst 也-std=c++17
很好【参考方案2】:
我将我的 GCC 升级到版本 10,它编译了 std::execution::par
及其包含的 <execution>
(无法使用 gcc 版本 7.5.0 定位)。我按照此链接中的说明进行操作:https://tuxamito.com/wiki/index.php/Installing_newer_GCC_versions_in_Ubuntu
【讨论】:
以上是关于找不到标头`execution`和`std::reduce`的主要内容,如果未能解决你的问题,请参考以下文章
由于在 Angular 6 中找不到标头而导致的 CrossOrigin 错误