Читаю Страуструпа 2013 года. На одной странице, посвящённой lambdas, целый ворох вопросов:
1)
If a lambda expression does not take any arguments, the argument list can be omitted
Тем не менее, при использовании лямбд с auto указывать () нужно если есть явный возвращаемый тип ->:
auto z = [] -> int { return 1; };
main.cpp:24: ошибка: expected '{' before '->' token
auto z = [] -> int { return 1; };
^
Если -> нет, то ошибок компиляции нет. Почему гуру не пишет об этом?
2)
[=, capture-list]: implicitly capture by value all local variables with names not mentioned in
the list. The capture list cannot contain this. The listed names must be preceded by &
Тем не менее, сам Страуструп неоднократно пишет вот так:
auto z2 = [=,y]{ if (y) return 1; else return 2; }
Почему гуру сам нарушает «must»?
3)
double (∗p3)(int) = [](int a) { return sqrt(a); }; // error : argument types do not match
Почему argument types do not match?