C++ gcc7 lambda表达式返回类型,不带箭头
我无意中写了以下内容,但没有收到gcc 8的任何警告:C++ gcc7 lambda表达式返回类型,不带箭头,c++,gcc,C++,Gcc,我无意中写了以下内容,但没有收到gcc 8的任何警告: auto f = []() bool {}; 我从未听说过或读过关于前面语法的任何内容。我的意图是写: auto f = []() -> bool {}; 在本例中,gcc发出了我所期望的非常有用的警告:no return语句 我做了一些实验,GCC在没有警告或错误的情况下接受了第一个语法,因为至少GCC 7.1,但GCC 6.3不接受。似乎没有其他编译器接受它。此外,第一种语法也适用于本机类型:boolintfloat等,但不适
auto f = []() bool {};
我从未听说过或读过关于前面语法的任何内容。我的意图是写:
auto f = []() -> bool {};
在本例中,gcc发出了我所期望的非常有用的警告:no return语句
我做了一些实验,GCC在没有警告或错误的情况下接受了第一个语法,因为至少GCC 7.1,但GCC 6.3不接受。似乎没有其他编译器接受它。此外,第一种语法也适用于本机类型:bool
int
float
等,但不适用于struct A{}等类代码>
这是一个bug还是一个新的c++17或c++20语法,例如与属性相关?这似乎是一个侥幸。只要您有GCC 7或GCC 8,代码(但不是您所指出的警告)对这两种代码都是相同的。但是GCC6不接受它,也不接受我尝试过的任何其他编译器
它似乎不是有效的C++。它肯定不是为C++20添加的,因为(虽然8确实添加了一些)。
您将传递什么作为-std=
?可能是GNU扩展?我没有传递任何选项,这发生在默认编译器配置上。这只适用于gcc。Clang、MSVC和ICC拒绝编译它:C++是一种复杂的语言。因此,解析它也很复杂,而且不平凡。这意味着编译器将有bug。在99.9999%的情况下,它不会是编译器中的错误,但您似乎找到了一个。:)所以我建议你去看看。@Someprogrammerdude在讨论了他们的IRC之后,他们开了一张罚单:这个错误在GCC9中修复了