2016-06-20 11 views
0

ばかげた理由から、私は次のgeneric variadic lambda関数が必要です。 MINGW-W64上のGCC 5.3.0はそれを拒否しています。 columnは関数テンプレートです。ジェネリックバリアブルラムダのGCCコンパイラエラー

auto col = [&run](auto&&... params){return column(run,params);}; //error 

診断:

..\src\RunOutputData.cpp: In lambda function: 
..\src\RunOutputData.cpp:94:64: error: parameter packs not expanded with '...': 
    auto col = [&run](auto&&... params){return column(run,params);}; 
                   ^
..\src\RunOutputData.cpp:94:64: note:   'params' 

IsGCCwrong

+0

'テンプレート自動run_col(ランのconst&RUN){返す[&](オート&& .. {auto} = run_col(run);}でインスタンス化されていますが、動作するように見えます。また、 'auto col = [&run](auto && ... p){returnカラム(run、std :: forward (p)...};}は動作するようです。 –

答えて

1

colラムダparameter packを使用していますが、あなたはそれを展開していません。

columnparams...

に含まれるすべてのパラメータで呼び出されるように、あなたの問題への解決策の一つは、(許可され、それが定義されている、あなたはそれに渡すパラメータを受け入れます) columnにパラメータを持つ括弧内にそれを拡大しています
auto col = [&run](auto&&... params) 
{ 
    return column(run, params...); 
}; 

や完璧な転送と、あなたはそれをやったとして:

auto col = [&run](auto&&... params) 
{ 
    return column(run, std::forward<decltype(params)>(params)...); 
};