为什么lambda参数的默认参数会触发一个"-CC"警告?

rub*_*nvb 17 c++ lambda c++11

我在代码中的某个地方有这个lambda:

[](bool a, bool=true){ return !a;} }
Run Code Online (Sandbox Code Playgroud)

和GCC 4.6"抱怨"这个警告:

warning: default argument specified for lambda parameter [-pedantic]
Run Code Online (Sandbox Code Playgroud)

当你不知道为什么这是"坏"时,这是非常无益的.我咨询了FDIS n3290,但没有找到5.1.2 Lambda Expressions关于默认参数和lambda的任何内容.

更新:在这里提交了一份错误报告.

更新2:好的,从现在开始我正在使用-pedantic-errors.-pedantic只发出警告,而不是错误.

Bo *_*son 14

第5.1.2节第5节明确指出您不能拥有参数的默认值.

默认参数(8.3.6)不应在lambda声明符的parameter-declaration-clause中指定.

  • @Tomalak:该标准要求诊断出不正确的程序.gcc诊断出来了.如果除了诊断之外还希望它失败,请使用`-Werror`或`-pedantic-errors`.`-pedantic`被记录为"发出所有要求的警告",如果你想要错误,似乎"愚蠢"使用只给你警告的选项;-p (2认同)

mar*_*inj 7

从C++ 14开始,它是允许的.很久以前发现它是一个缺陷:lambdas的默认参数,以及lambda表达式中的默认参数.