【问题标题】:GCC compiler error on generic variadic lambda通用可变参数 lambda 上的 GCC 编译器错误
【发布时间】:2016-06-20 19:31:33
【问题描述】:

出于荒谬的原因,我需要以下generic variadic lambda 函数。 MINGW-w64 上的 GCC 5.3.0 拒绝它。 column 是一个函数模板。

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?

【问题讨论】:

  • template<class CT> auto run_col(Run<CT>const&run){return [&](auto&&... params){ return column(run,std::forward<decltype(params)>(params)...);};}auto col = run_col(run); 实例化似乎可以工作。 auto col = [&run](auto&&... p){return column(run,std::forward<decltype(p)>(p)...);}; 似乎也可以工作。

标签: gcc lambda variadic


【解决方案1】:

col lambda 中,您使用的是 parameter pack,但您没有扩展它。

您的问题的一个解决方案是将其在括号内扩展为 column 的参数(授予它已定义并将接受您传递给它的参数),以便使用包含的所有参数调用 columnparams...

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

或者你已经完成了完美的转发:

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

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2016-06-05
    • 2016-10-19
    • 2016-01-23
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多