我試圖用variadics把N
參數函數轉換成2^N
參數函數。下面的代碼片段通過clang 3.9
愉快編譯,而nvcc 8.0
(有效gcc 5.4
)與錯誤悲慘的失敗了:gcc和clang多參數包擴展
error: no instance of overloaded function "foo" matches the argument list
代碼:
template<class... Ts> struct Typelist{};
template <class..., class... Us>
void foo(Typelist<>, Typelist<Us...>, Us... us){
// do the actual work
}
template <class T, class... Ts, class... Us>
void foo(Typelist<T, Ts...>, Typelist<Us...>, T t, Ts... ts, Us... us){
foo(Typelist<Ts...>{}, Typelist<Us..., Us...>{}
, ts..., us..., (us+t)...);
}
template <class... Ts>
void bar(Ts... ts){
foo(Typelist<Ts...>{}, Typelist<unsigned>{}
, ts..., 0u);
}
稱爲像
int main(int /*argc*/, char */*argv*/[])
{
bar(2u);
bar(2u, 3u, 4u);
return 0;
}
難道我做錯了什麼?我如何使它與gcc
一起工作?
你在做什麼全面的調用?根本不應該編譯。 – Barry
gcc 6.3.1對此沒有任何問題。 –
@SamVarshavchik真的嗎?這對我來說有一個問題。你有沒有把至少兩個參數傳遞給'apply()'? – Barry