int main()
{
auto l = [x = 10]() -> decltype(x) {};
}
clang++ 4.0 rejects this code z powodu następującego błędu:Dostęp uogólniać-przechwycone obiekty lambda spływu typ zwracany
error: use of undeclared identifier 'x' auto l = [x = 10]() -> decltype(x) {}; ^
g++ 7 rejects this code z powodu następującego błędu:
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) {}; ^
Czy jest to błąd, czy jest coś w standardzie, które jawnie uniemożliwia używanie obiektów ujętych w uogólnioną składnię C++ 14 w zwracanym typie zwracania lambda?
Zauważ, że oba kompilatory są zadowoleni z non-uogólnione zrzuty:
int main()
{
int x = 10;
auto l = [x]() -> decltype(x) { return 0; };
}
'int' był domyślnym typem zwrotnym, czy gcc wyda inny typ? – alexeykuzmin0
@ alexeykuzmin0: dobry połów. [To zawsze "dedukuje" 'int'] (http://melpon.org/wandbox/permlink/OivD8IYUT3Jq0720) ... aktualizowanie pytania –
Istnieje kilka dziwnych przypadków z' decltype' i lambdas, np. [to] (https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/6-VL5bzK6Ik). – TartanLlama