Я написал следующее случайно и не получил предупреждения с gcc 8:
auto f = []() bool {};
Я никогда не слышал и не читал ничего о предыдущем синтаксисе. Мое намерение заключалось в том, чтобы написать:
auto f = []() -> bool {};
И в этом случае gcc выдает очень полезное предупреждение, которое я ожидал: no return statement
.
Я сделал несколько экспериментов, и GCC принимает первый синтаксис без предупреждений или ошибок, поскольку по крайней мере GCC 7.1, но не с GCC 6.3. Никакие другие компиляторы, похоже, не согласны с этим. Кроме того, первый синтаксис принимается для собственных типов: bool
int
float
и таких, но не для классов, таких как struct A {};
Является ли это ошибкой или это новый синтаксис С++ 17 или С++ 20, связанный, например, с атрибутами?