gpt4 book ai didi

c++ - 使用透明 std 函数对象时,我们还需要写空尖括号吗?

转载 作者:IT老高 更新时间:2023-10-28 12:36:08 26 4
gpt4 key购买 nike

通过类模板参数推导我们可以这样写:

std::less Fn;

但是,G++ 8.2 拒绝此代码:

#include <algorithm>
#include <vector>
#include <functional>

int main()
{
std::vector v= { 1, 3, 2, 7, 5, 4 };

std::sort(v.begin(),v.end(),std::greater());
}

发出以下错误:

error: cannot deduce template arguments for 'greater' from ()

Clang++ 7.0 和 MSVC 15.8.0 编译它没有警告。哪个编译器是对的?

最佳答案

GCC 是错误的。已经有一个bug report .

[dcl.type.simple]/2说:

A type-specifier of the form typenameopt nested-name-specifieropt template-name is a placeholder for a deduced class type ([dcl.type.class.deduct]).

还有 [dcl.type.class.deduct]/2说:

A placeholder for a deduced class type can also be used in the type-specifier-seq in the new-type-id or type-id of a new-expression, as the simple-type-specifier in an explicit type conversion (functional notation) ([expr.type.conv]), or as the type-specifier in the parameter-declaration of a template-parameter. A placeholder for a deduced class type shall not appear in any other context.

允许这样使用。


[temp.arg]/4描述 template-id 是必需但没有 <>语法错误 .然而这里 std::greater未解析为 template-id,因此该段落不适用。

关于c++ - 使用透明 std 函数对象时,我们还需要写空尖括号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53114567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com