[英]parameter packs not expanded with ‘…' — another variadic template bug with gcc?
眾所周知,gcc對可變參數模板的處理是不完整的(例如,參見this和this ),但是我想知道以下錯誤是否已經為人所知(我無法在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.