Have code like this
#include <iostream>
using namespace std;
int main()
{
cout<<[](){ return 0;};
cout<<[](){ return 3.2;};
cout<<[](){ return true;};
cout<<[](){ return false;};
cout<<[](){ return "Hello world!";};
cout<<[]()->int{ return 0;};
cout<<[]()->double{ return 3.2;};
cout<<[]()->bool{ return true;};
cout<<[]()->bool{ return false;};
cout<<[]()->const char*{ return "Hello world!";};
return 0;
}
Compile it with gcc version 4.8.2
and my output is only 1111111111
.
Why only "1"?
When a lambda expression has no capture, it is implicitly convertible to a function pointer.
A function pointer, in turn, is implicitly convertible to
bool
, yieldingtrue
if the pointer is not null, which gets printed.If you
cout << std::boolalpha
before your outputs, you'll seetruetruetrue....
printed instead.If you capture something in your lambda, then it is no longer convertible to a function pointer, and you'd get a compiler error.
If you want to print the result returned by calling the lambda, then you need
()
, as others have pointed out.What if you did this:
You're not calling the method, but attempting to print its address. The overload
operator <<(bool)
forcout
is chosen, thus for any valid function you attempt to print, you get a1
.To actually, call the function (or lambadas), add
()
.What you say:
What you want to say:
See the bracket?