C++ C++;17调用时没有匹配功能以减少错误

C++ C++;17调用时没有匹配功能以减少错误,c++,c++17,C++,C++17,此代码来自Apress的《C++17标准库快速参考》一书: #包括 #包括 使用名称空间std; int main(){ 向量向量{4,2,5,1,3,6}; 整数和=减少(开始(vec),结束(vec)); } 当我使用Windows 7上的选项-std=c++17(或-std=gnu++2a)用g++-9.2编译它时,我得到: error: no matching function for call to 'reduce(std::vector<int, std::allocator

此代码来自Apress的《C++17标准库快速参考》一书:

#包括
#包括
使用名称空间std;
int main(){
向量向量{4,2,5,1,3,6};
整数和=减少(开始(vec),结束(vec));
}
当我使用Windows 7上的选项
-std=c++17
(或
-std=gnu++2a
)用
g++-9.2
编译它时,我得到:

error: no matching function for call to 'reduce(std::vector<int, std::allocator<int> >::iterator, std::vector<int, std::allocator<int> >::iterator)'
错误:调用“reduce(std::vector::iterator,std::vector::iterator)”时没有匹配的函数

这个代码怎么了?谢谢。

正如另一条评论所指出的,我已经尝试使用
x86-64 gcc(contracts)
版本编译您的代码,我想这是gcc编译器的实验版本,编译是成功的。试试看

此外,我还发现了一篇有趣的帖子,与我们在这里讨论的主题相同

编辑


正如OP在下面的评论中所发布的,
gcc-10.0.0
成功地编译了问题中的代码。

我认为您需要g++10(实验版),但我不确定,从未尝试过。什么是
begin
?或
结束
?通常这些函数总是作为成员函数调用,例如
vec.begin()
vec.end()
@JoshWeinstein•由C++11引入,@JoshWeinstein这些函数是
std::begin
std::end
。人们应该更喜欢在通用上下文中使用,因为它们也适用于C风格的数组。试试看,
gcc-10.0.0
似乎能够编译此代码。