Насколько я знаю, в стандартном С++ 11 (не С++ 14), когда опуская тип возврата лямбда, его тип возврата выводится следующим образом:
- Тип возвращаемого выражения, когда лямбда состоит только из одного оператора return с выражением или
-
void
во всех остальных случаях.
Рассмотрим теперь этот код:
#include <iostream>
auto closure = [](int x)
{
x++;
return x;
};
int main()
{
int y = closure(10);
std::cout << y << std::endl;
}
Это должно подпадать под случай 2., однако код компилируется, как если бы были С++ 14 с выводом типа auto
, как в g++ 4.9.2, g++ 5, так и в clang++, с -pedantic -Wall -Wextra -std=c++11
. Что здесь происходит? Я неправильно интерпретирую этот стандарт?