http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48322
Summary: [C++0x] Plural parameter packs are not expanded well Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: gintensub...@gmail.com Source Code (bug.cc): #include <typeinfo> #include <cxxabi.h> #include <cstdlib> #include <iostream> template<class T> void print_typename() { int status = 0; char* const name = abi::__cxa_demangle( typeid(T).name(), 0, 0, &status ); std::cout << name << std::endl; std::free( name ); } #include <type_traits> #include <utility> #include <tuple> template<class... Ts> struct X { template< class... Us, class Tuple = std::tuple< std::pair<Ts, Us>... > > static void test( Us... ) { print_typename<Tuple>(); } }; int main() { // expected X<>::test(); // std::tuple<> X<int>::test(1); // std::tuple<std::pair<int, int>> X<int>::test(1.0); // std::tuple<std::pair<int, double>> X<>::test(1); // no matching function X<int>::test(); // no matching function } Output: std::tuple<> std::tuple<std::pair<int, int> > std::tuple<std::pair<double, double> > std::tuple<std::pair<int, int> > std::tuple<>