c variadic模板,错误的参数包长度?
发布时间:2020-12-16 07:30:33 所属栏目:百科 来源:网络整理
导读:这是一个 gcc错误或以某种方式错误使用参数包? (用gcc 4.6.3编译:) #include iostreamtemplateclass...Ts struct tuple{};templateclass...class test;template template class... class tp,class...arg1Ts,class...arg2Ts class testtparg1Ts...,tparg2Ts.
这是一个
gcc错误或以某种方式错误使用参数包?
(用gcc 4.6.3编译:) #include <iostream> template<class...Ts> struct tuple{}; template<class...>class test; template< template <class...> class tp,class...arg1Ts,class...arg2Ts> class test<tp<arg1Ts...>,tp<arg2Ts...>>{ public: void test1(arg1Ts... arg1s,arg2Ts... arg2s){ std::cout<<sizeof...(arg1s); //Why is this 2? Why not 0? std::cout<<sizeof...(arg2s); //2 ok } }; int main(){ test<tuple<>,tuple<char,int>> t1; //(arg1Ts... = empty),(arg2Ts... = char,int) t1.test1('a',2); //prints 22,not 02 } 解决方法
我在这里写了一个可编辑的例子:
#include <iostream> template <class...> class test; template < template <class...> class tp,class...arg2Ts > class test < tp<arg1Ts...>,tp<arg2Ts...> > { public: void test1(arg1Ts...,arg2Ts...) { std::cout << sizeof...(arg1Ts) << ' ' << sizeof...(arg2Ts) << 'n'; } }; template <typename...> class Pack; int main(){ test< Pack<>,Pack<char,int>> t1; t1.test1('a',2); } (与你的没什么不同,但它干净地编译) 使用clang 3.0,这给出了: 0 2 这正是预期的.所以我想你正在使用的gcc版本有一个bug.是时候进入4.7了? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |