私はコードを書いていますが、最近、g++ が特定のクラスの問題について警告しないことがわかりました: C++11 5.1.2.4 ごとに、ラムダが単一の return ステートメントでない場合、戻り値の型末尾の戻り型として宣言するか、無効にする必要があります。
十分な意味がある場合、g++ は無効なコードをコンパイルすることを許可されていますが、この動作をオフにする方法 ( -fpedantic
g++-4.7 で許可されている) または少なくともそれについて警告する方法はありますか?
コード例:
[]() { return 0; } //is fine
[&a]() { a++; return 0; } //is not fine but g++ doesn't warn me
[&a]() -> int {a++; return 0; } //is fine again
C++11 5.1.2.4
実装は、右辺値参照型のメンバーをクロージャー型に追加してはなりません。ラムダ式にラムダ宣言子が含まれていない場合は、ラムダ宣言子が () であるかのようになります。lambda-expression に Trailing-return-type が含まれていない場合は、trailing-return-type が次の型を示しているかのようになります。
— 複合文の形式が
{ attribute-specifier-seq(opt) return expression ; の場合。左辺値から右辺値への変換 (4.1)、配列からポインターへの変換 (4.2)、関数
からポインターへの変換 (4.3) の後に返される式の型。— それ以外の場合は無効です。