具有三元运算符的函数类型

function type with ternary operator

我试试这个代码:

    int a=1;
    std::function<int (int, int)> getM = a?
    [](int x, int y) {
        return (x+y);
    } :
    [](int x, int y) {
        return (x*y);
    };


    cout<<getM(1,2);

在visual studio中给出错误: 错误 C2446:“:”: 没有从 'wmain::' 到 'wmain::' 的转换 1> 没有可用的可以执行此转换的用户定义转换运算符,或者无法调用该运算符

在 GCC 中编译。我想 GCC 是正确的行为,但我不确定。在 VS2013 上还有哪些其他选择?

我可以确认它也不是使用 VS 2015 update 3 构建的。

What are other options?

嗯,标准 if/else 始终是任何三元运算的替代方法:

std::function<int (int, int)> getM;;

if (a)
    getM = [](int x, int y) { return (x + y); };
else
    getM = [](int x, int y) { return (x * y); };