Another day of being surprised by C++
typedef int (*functiontype)();
int x = 10;
functiontype a,b;
a = []() -> int { return 10; }; // OK
b = [&x]() -> int {return x; }; // Type error
My intuition had said the latter should work; after all, the only thing that changed was the addition of a capture expression.
However, this changes the type of the lambda so that it's no longer coercable to
a regular function (and in fact, others I've talked to suggest that the surprising
thing is that the assignment to a
even works.)
sigh.
There is a work around:
#include <functional>
typedef std::function<int()> functiontype;
It's funny: Before working with C++ lambdas, I had been thinking they would provide huge amounts of power when working with (and possibly providing!) C/C++ API interfaces. Alas, they are special beasts.