int main()
{
auto l = [x = 10]() -> decltype(x) {};
}
-
clang++ 4.0 отклоняет этот код со следующей ошибкой:
error: use of undeclared identifier 'x' auto l = [x = 10]() -> decltype(x) {}; ^
-
g++ 7 отклоняет этот код со следующей ошибкой:
In function 'int main()': error: 'x' was not declared in this scope auto l = [x = 10]() -> decltype(x) {}; ^ error: 'x' was not declared in this scope In lambda function: warning: no return statement in function returning non-void [-Wreturn-type] auto l = [x = 10]() -> decltype(x) {}; ^
Является ли это ошибкой или есть что-то в стандарте, которое явно предотвращает использование объектов, захваченных с использованием обобщенного синтаксиса С++ 14, в типе возвращаемого возврата лямбда?
Обратите внимание, что оба компилятора довольны не обобщенными захватами:
int main()
{
int x = 10;
auto l = [x]() -> decltype(x) { return 0; };
}