int main()
{
auto l = [x = 10]() -> decltype(x) {};
}
clang++ 4.0 rejects this code mit dem folgenden Fehler:Zugriff verallgemeinert-erfassten Objekte in Lambda nachlaufRückgabeTyp
error: use of undeclared identifier 'x' auto l = [x = 10]() -> decltype(x) {}; ^
g++ 7 rejects this code mit dem folgenden Fehler:
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) {}; ^
Ist das ein Fehler oder gibt es im Standard etwas, das explizit verhindert, dass Objekte, die mit der verallgemeinerten C++ 14 -Syntax erfasst wurden, in dem nachfolgenden Rückgabetyp des Lambda verwendet werden?
Beachten Sie, dass beide Compiler glücklich sind mit nicht verallgemeinert Captures:
int main()
{
int x = 10;
auto l = [x]() -> decltype(x) { return 0; };
}
'int' war ein Standard Rückgabetyp, wird gcc irgendeinen anderen Typ herleiten? – alexeykuzmin0
@ alexeykuzmin0: guter Fang. [Es leitet immer "int"] (http://melpon.org/wandbox/permlink/OivD8IYUT3Jq0720) ... Aktualisieren der Frage –
Es gibt einige seltsame Fälle mit 'decltype' und lambdas, z. [this] (https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/6-VL5bzK6Ik). – TartanLlama