Вывод типа возврата с лямбдами-операторами

я писал код, а янедавно узнал, что g ++ неНе предупреждайте меня об определенном классе проблем: согласно C ++ 11 5.1.2.4, если ваша лямбда не является единственным оператором возврата, тогда тип возврата должен быть объявлен как тип конечного возврата или быть пустым.

Хотя 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

Реализация не должна добавлять членов ссылочного типа rvalue к типу замыкания. Если лямбда-выражение не содержит лямбда-декларатор, это как если бы лямбда-декларатор был (). Если лямбда-выражение не включает в себя тип конечного возврата, это как если бы тип конечного возврата обозначает следующий тип:

 если составной оператор имеет форму

{attribute-specier-seq (opt) return expression; }

тип возвращаемого выражения после преобразования lvalue-to-rvalue (4.1), преобразования массива в указатель (4.2) и преобразования функции в указатель (4.3); -

 в противном случае, пустота.

Ответы на вопрос(2)

Ваш ответ на вопрос