I have this simple lambda:
std::variant<int, char> myLambda = []() { // no suitable user-defined conversion from "type" to "std::variant<int, char>" exists
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c';
}
return res;
};
But it doesn't compile, producing error no suitable user-defined conversion from "type" to "std::variant<int, char>" exists. What am I doing wrong?
Either you mean
std::variant<int, char> v = []() {
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c';
}
return res;
}();
^^^
Or you mean
auto myLambda = []() {
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c';
}
return res;
};
Lambda expressions have unique types.
The lambda expression type is wrong. You're trying to bind to std::variant<int, char>. Lambda expressions type name is impl-defined. Use auto:
auto processProjectFile = []() {
std::variant<int, char> res;
if (true) {
res = 1;
} else {
res = 'c';
}
return res;
};
Optionally, you can cast the lambda type to std::function replacing auto by std::function<std::variant<int, char>(void)>.
But if you intend to call the lambda, just replace }; at the end by }();.
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