http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52380
Bug #: 52380 Summary: [C++11] Number of variadic template arguments wrongly interpreted in class template Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: ai.az...@gmail.com Created attachment 26752 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26752 Output of -v option and preprocessed file Here is a reproducer; /////////////////////////////////////////////// // An enclosing class template is necessary to // reproduce the bug. template<typename T> struct S { template<typename U> struct Unary // Line 5 {}; template<unsigned, typename... Args> struct Dispatch // Line 9 : public Unary<Args...> {}; template<typename... Args> struct Variadic : public Dispatch<sizeof...(Args), Args...> {}; }; int main() { S<void>::Variadic<void> z; } /////////////////////////////////////////////// GCC 4.7.0 20120218 (experimental) with -std=c++11 complains about the above code; main.cpp: In instantiation of 'struct S<void>::Dispatch<1u, void>': main.cpp:14:10: required from 'struct S<void>::Variadic<void>' main.cpp:21:27: required from here main.cpp:9:10: error: wrong number of template arguments (2, should be 1) main.cpp:5:10: error: provided for 'template<class T> template<class U> struct S<T>::Unary' Obviously, just one template argument is passed to `Unary'. However, GCC misinterprets the number of template arguments as two.