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
, yielding true
if the pointer is not null, which gets printed.
If you cout << std::boolalpha
before your outputs, you'll see truetruetrue....
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With