2016-06-20 6 views
0

Aus lächerlichen Gründen brauche ich die folgende generic variadic lambda Funktion. GCC 5.3.0 auf MINGW-w64 lehnt es ab. column ist eine Funktionsvorlage.GCC-Compiler Fehler auf generische Variadic Lambda

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

Diagnose:

..\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

'Vorlage Auto run_col (Run const & run) {return [&] (auto && .. .params) { Return-Spalte (run, std :: forward (params) ...);};} 'instanziiert mit' auto col = run_col (run); 'scheint zu funktionieren. Auch 'auto col = [& run] (auto && ... p) {return column (run, std :: vorwärts (p) ...);};' scheint zu funktionieren. –

Antwort

1

In col Lambda verwenden Sie eine parameter pack, aber Sie erweitern es nicht.

Einer von Lösungen für Ihr Problem wächst es in der Klammer mit Parametern column (gewährt sie definiert ist und die Parameter akzeptieren, dass Sie es passieren), so dass column wird mit allen Parametern in params...

enthaltenen aufgerufen werden
auto col = [&run](auto&&... params) 
{ 
    return column(run, params...); 
}; 

oder mit perfektem Forwarding, wie Sie es getan haben:

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