【发布时间】:2020-01-30 22:38:09
【问题描述】:
我可以在 Fedora 和 Ubuntu 上使用 gcc 9.2.1 编译以下代码(使用 std::transform_reduce),但尝试在 clang see godbolt 上编译失败,并且我收到报告说某些 FSF 版本的 gcc 9.2.1 也拒绝编译代码,要求std::execution_policy 作为std::transform_reduce 的第一个参数。
#include <vector>
#include <algorithm>
#include <numeric>
auto brokenvector(std::vector<int> const& a, std::vector<int> const& b)
{
return std::transform_reduce(cbegin(a), cend(a), cbegin(b), 0, std::plus<>{},std::multiplies<>{});
}
我特别不能在这里使用std::execution_policy,cppreference 和 C++ 草案标准文档 n4659 都显示重载没有执行策略。
我是否踏入了某种政治雷区,其中一半可用的编译器拒绝实施标准,或者代码不正确?
【问题讨论】:
-
C++17 是(相对)新的。如果答案很简单,我不会感到惊讶:一些库实现者还没有实现这个
-
所以只要编译器/库遵守(完全实现)标准,它就可以移植。
-
@CássioRenan 这与我的问题正好相反,我明确不想指定执行策略。此外,虽然“C++17 尚未完全支持”的答案在 2017 年是完全合理的,但在 2020 年就不太容易理解了。我对 C++ 演变的理解是,目标是让大多数新功能已经在多个版本中实现标准化之前的编译器,对于我作为一个主要是 C 开发人员的我来说,std::algorithm 似乎是最近 c++ 标准的皇冠上的明珠。这让我感到莫名其妙。
-
@EOF 我知道。我认为您会认为这很有趣,因为它体现了您的问题:标准功能可能需要(有时很长时间)才能真正实现(如果您查看其中的一个 cmets,MSVC 花了 6 年多的时间才完成对 C 的支持++11!)
标签: c++