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

C++ 具有三元运算符的函数类型,c++,visual-studio,c++11,gcc,ternary-operator,C++,Visual Studio,C++11,Gcc,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); inta=1; std::函数getM=a? [](整数x,整数y){ 返回(x+y)

我尝试以下代码:

    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);
inta=1;
std::函数getM=a?
[](整数x,整数y){
返回(x+y);
} :
[](整数x,整数y){
返回(x*y);
};

cout我可以确认它也不是用VS 2015更新3构建的

还有什么其他选择

标准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); };
std::函数getM;;
如果(a)
getM=[](intx,inty){return(x+y);};
其他的
getM=[](intx,inty){return(x*y);};

有一个VS at支持的功能表。我不确定什么是解决您的问题的好办法。我想说VS是正确的,但伙计,那些候选运算符函数。@aschepler VS是错误的:)这应该将两个lambda都转换为函数指针。VS的问题是,它们的lambda有太多到函数指针的转换函数,导致了歧义:/