找不到标头`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::reducestd::execution::par 从 C++17 开始可用。

对于大多数编译器,C++17 还没有完全实现。您可以尝试使用带有标志-std=c++1z 的clang。

【讨论】:

当心。如果使用系统 libstdc++ 而不是 libc++,您仍然可能会遇到 clang++ 错误。 @rwst 也 -std=c++17 很好【参考方案2】:

我将我的 GCC 升级到版本 10,它编译了 std::execution::par 及其包含的 &lt;execution&gt;(无法使用 gcc 版本 7.5.0 定位)。我按照此链接中的说明进行操作:https://tuxamito.com/wiki/index.php/Installing_newer_GCC_versions_in_Ubuntu

【讨论】:

以上是关于找不到标头`execution`和`std::reduce`的主要内容,如果未能解决你的问题,请参考以下文章

VSCode 找不到 Lua/IUP 标头

似乎找不到请求标头的 requestID 参数的问题

为啥使用 Origin 标头时找不到路由

由于在 Angular 6 中找不到标头而导致的 CrossOrigin 错误

错误:找不到 PkgConfig(缺少:PKG_CONFIG_EXECUTABLE)

找不到标准标头的语言