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: [email protected]
ReportedBy: [email protected]
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<>