Przypisuję do std::function<double()>
wyrażenie lambda. Ten fragment działaOperator potrójny nie działa z funkcjami lambda.
if(fn_type==exponential)
k.*variable = [=,&k](){ return initial*exp(-k.kstep*par); };
else
k.*variable = [=,&k](){ return initial*pow(k.kstep, par); };
natomiast jeśli chcę użyć operatora trójskładnikowych
k.*variable = (fn_type==exponential ? [=,&k](){ return initial*exp(-k.kstep*par); } : [=,&k](){ return initial*pow(k.kstep, par); });
pojawia się następujący błąd:
error: no match for ternary ‘operator?:’ in <awfully long template error, because this whole thing is in a class defined in a function...>
Czy jest to błąd gcc (używam 4.7 .2)? W przeciwnym razie, dlaczego istnieje taki limit w standardzie?
+1 za odpowiedź, kolejne +1 za "jest czystsze dzięki temu/else". –