これは、この質問のフォローアップです。
C ++での関数転送の問題に関する2002年の論文では、次のように述べています。
これは、Boost.BindとBoost.Lambdaで現在採用されている方法です。
template<class A1, class A2, class A3> void f(A1 & a1, A2 & a2, A3 & a3) { return g(a1, a2, a3); }
その主な欠点は、非定数値を転送できないことです。引数の演繹は非定数参照を作成し、参照は引数にバインドできません。これは無実の例を次のように作成します
int main() { f(1, 2, 3); }
失敗します(C1に違反します)。
呼び出しが失敗したようですが、説明は正しいですか?リテラル1、2、3 const rvaluesではありませんか?