gpt4 book ai didi

c++ - 标准中的规则在哪里指定具有尾随返回类型的函数,其返回类型包含占位符类型应该是 `auto`

转载 作者:行者123 更新时间:2023-12-01 23:29:59 25 4
gpt4 key购买 nike

auto* fun()->int*{}
int main(){
}

snippet被Clang和GCC都拒绝了,都报错了,就是

'fun' function with trailing return type has 'auto*' as its type rather than plain 'auto'

但是,我还没有在标准中找到任何禁止这种用法的规则。我认为符合的唯一相关规则如下:

In a declaration T D where D has the form

 D1 ( parameter-declaration-clause ) cv-qualifier-seq opt
ref-qualifier opt noexcept-specifier opt attribute-specifier-seq opt trailing-return-type

并且声明 T D1 中包含的 declarator-id 的类型是“derived-declarator-type-list T”,T 应该是单个类型说明符 auto

然而,根据dcl.meaning#3 ,它说:

Thus, a declaration of a particular identifier has the form

T D

where T is of the form attribute-specifier-seqopt decl-specifier-seq and D is a declarator.

因此,回到这个例子,T 是 auto,声明符是 *fun()->int*。所以,这里的 T 是一个单一的类型说明符 auto,声明没有违反任何规则。为什么 GCC 和 Clang 都拒绝有效代码?如果我错过了标准中禁止这种用法的规则,那么规则是什么?

最佳答案

这是语法。这是 core issue 681 .

declarator:
ptr-declarator
noptr-declarator parameters-and-qualifiers trailing-return-type

ptr-declarator:
noptr-declarator
ptr-operator ptr-declarator

noptr-declarator:
declarator-id attribute-specifier-seq_opt
noptr-declarator parameters-and-qualifiers
noptr-declarator [ constant-expression_opt ] attribute-specifier-seq_opt
( ptr-declarator )

*f () -> whatever 不是有效的声明符;语法不允许在该位置使用 ptr-declarator。 (由此可见,解释声明符的规则不针对这种情况提供 - 正如评论中所讨论的那样。)

关于c++ - 标准中的规则在哪里指定具有尾随返回类型的函数,其返回类型包含占位符类型应该是 `auto`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66432468/

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