繁体   English   中英

在C ++ 11中此尾随返回类型合法吗?

[英]Is this trailing return type legal in C++11?

下列:

auto (*f())() -> int;

在C ++ 11模式下使用Clang给出错误:

错误:“自动”返回而没有尾随返回类型; 推导的返回类型是C ++ 14扩展

但以C ++ 14模式编译。 GCC在使用-Wall -Wextra -pedantic两种模式下编译时都不会抱怨。

n3337 7.1.6.4/2说:

在此类声明符有效的任何情况下,自动类型声明符都可能与带有尾随返回类型(8.3.5)的函数声明符一起出现。

8.3.5p2讨论了函数声明符,但是我对此经验不足。 谁能解释在C ++ 11中是否合法?

CWG 1725部分涵盖了这一点:

声明的处理方式如下:

 auto (*f())() -> int; // #1 

8.3.5 [dcl.fct]第2段似乎要求确定嵌套声明器的类型

 auto (*f()); // #2 

(C ++ 11)7.1.6.4 [dcl.spec.auto]格式错误,因为它没有尾随返回类型。 (在C ++ 14中,当然允许不带尾随返回类型的自动返回类型。)

理由(2013年9月):C ++ 11措辞的目的是,对尾随返回类型的要求仅适用于自动应用的声明器的顶层,而不适用于声明器处理中的每个可能的递归阶段。 [..]

此外,根据[dcl.fct] / 2

在声明TDD具有以下形式

D1 ( 参数声明子句 ) 尾随返回类型

并且声明T D1包含的声明 id的类型为“ derived-declarator-type-list TT应为单个type-specifier auto

如DR中所述, T D1auto (*f()) ,其类型为“ ()函数将指针返回auto ”(即,符合要求)。 因此,您的代码在C ++ 11和14中均有效,并且f的类型为“ ()函数返回指向()函数返回int指针”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM