簡體   English   中英

參數包沒有用'...'擴展-另一個gcc的可變參數模板錯誤?

[英]parameter packs not expanded with ‘…' — another variadic template bug with gcc?

眾所周知,gcc對可變參數模板的處理是不完整的(例如,參見thisthis ),但是我想知道以下錯誤是否已經為人所知(我無法在bugzilla上找到)還是確實是一個錯誤。 本質上,gcc(4.8.1)無法在lambda內擴展參數包:

#include <vector>
#include <algorithm>
#include <type_traits>

template<typename T, typename F, typename... X>
void bar(std::vector<T> const&c, F const&f, X&&... x)
{
  std:for_each(c.begin(),c.end(),[&](const T&t)
         { f(t,std::forward<X>(x)...); });
}

這導致(即使沒有任何實例化)

error: parameter packs not expanded with ‘...’:
  { f(t,std::forward<X>(x)...); });
                        ^

任何想法如何避免這種情況? (注意:使用icpc 14.0.2和clang 3.4可以)還是gcc正確並且clang和icpc錯誤?

編輯注意,問題是lambda,因為它也不能編譯:

template<typename T, typename F, typename... X>
void bar(std::vector<T> const&c, F const&f, X&&... x)
{
auto func = [&](const T&t){ f(t,std::forward<X>(x)...); };
std:for_each(c.begin(),c.end(),func);
}

與lambda定義中的“錯誤”報告有關。

鑒於代碼可以使用clang版本3.5(trunk 202594)進行干凈地編譯 ,更重要的是可以使用gcc 4.9.0 20140302(experimental)(GCC)進行編譯,都可以使用-Wall編譯,我想說這是早期版本的gcc的問題。

我正在http://gcc.gnu.org/bugzilla/中尋找gcc錯誤報告以確認這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM