6
コンパイラが第4のものに不満を表明している間に、ラムダの引数型がstd::function
型と異なる場合でも、なぜ3番目のケースが問題ないのか分かりません:std :: functionと異なるシグネチャを持つLambda関数
function<int(int)> idInt = [](int i) {return i;}; //OK
function<int(int&)> idInt = [](int &i) {return i;}; //OK
function<int(int&)> idInt = [](int i) {return i;}; //OK
function<int(int)> idInt = [](int &i) {return i;}; //ERROR!
ので左辺値から右値への変換があります(いわゆる「左辺値 - 右辺値変換」)が、右辺値から左辺値への変換はありません。 'std :: function'のコンストラクタは宣言されたシグネチャを気にせず、暗黙の*コール式*が有効かどうかについてのみ気にします。 –
なぜ 'auto'を使わないのですか? 'auto idInt = ...' – ZDF