Search code examples
c++lambdavariant

Return variant from a lambda


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?


Solution

  • 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 }();.