【发布时间】:2016-09-26 09:37:10
【问题描述】:
以下内容:
auto (*f())() -> int;
在 C++11 模式下使用 Clang 给出错误:
error: 'auto' return without trailing return type;推导出来的回报 类型是 C++14 扩展
但在 C++14 模式下编译。 GCC 在-Wall -Wextra -pedantic 的两种模式下编译都没有抱怨。
n3337 7.1.6.4/2 说:
自动类型说明符可能与带有 trailing-return-type (8.3.5) 在这样的声明符所在的任何上下文中 有效。
8.3.5p2 讨论了函数声明符,但我太缺乏经验,无法弄清楚。谁能解释它在 C++11 中是否合法?
【问题讨论】:
-
您是否要为函数指针
f返回指定尾随返回类型? -
我猜GCC编译它是对的。 Coliru 的 Clang 和 GCC 都说它是
int (*(*)())()。 -
无论标准是否允许,这显然也是一个编译器错误。当存在尾随返回类型时,指出尾随返回类型被省略的错误消息是错误消息。
-
@chris 嗯?那可能是
&f的类型,但不是f的类型,对吧? -
@hvd,是的,我使用了一些
print_type(f);的编译器错误技巧,所以它衰减了。
标签: c++ c++11 language-lawyer trailing-return-type