В моей книге сказано:
Lambdas с телами функций, которые содержат что-либо, кроме одного оператора return, который не указывает возвращаемый тип return return.
но это:
auto f = []{
int i=0; i++;
return std::string("foo");
};
std::cout << f() << std::endl;
фактически компилирует и выводит "foo", но этот lambda expr имеет больше, чем просто один оператор return, поэтому он должен возвращать void, потому что он не указывает вручную "- > std::string" в качестве возвращаемого типа.
Что здесь происходит?
Я использую компилятор Apple в последнем Xcode 4.6, основанный на Clang 3.2, кажется:
clang --version
Apple LLVM версия 4.2 (clang-425.0.24) (на основе LLVM 3.2svn) Цель: x86_64-apple-darwin12.2.0 Модель темы: posix