我正在将一个lambda表达式赋值给一个std::function<double()>
变量。这段代码是可行的。
if(fn_type==exponential)
k.*variable = [=,&k](){ return initial*exp(-k.kstep*par); };
else
k.*variable = [=,&k](){ return initial*pow(k.kstep, par); };
而且如果我想要使用三元运算符
k.*variable = (fn_type==exponential ? [=,&k](){ return initial*exp(-k.kstep*par); } : [=,&k](){ return initial*pow(k.kstep, par); });
我遇到了以下错误:
error: no match for ternary ‘operator?:’ in <awfully long template error, because this whole thing is in a class defined in a function...>
这是gcc的一个bug吗(我使用的是4.7.2版本)? 不然为什么标准会有这个限制呢?
:
两侧具有不同的类型。你有任何想法为什么它会编译通过吗?而谁是正确的,是MSVC还是clang和gcc? - Ben