1 // Origin: PR c++/48320
2 // { dg-do compile { target c++11 } }
3 
4 template<class... T>
5 struct tuple
6 {
7     typedef int type;
8 };
9 
10 template<int... Indices>
11 struct indices
12 {
13 };
14 
15 template<unsigned i, class Tuple>
16 struct tuple_element
17 {
18     typedef Tuple type;
19 };
20 
21 template<class Tuple,
22          int... Indices,
23          class Result = tuple<typename tuple_element<Indices, Tuple>::type...> >
24 Result
25 f(Tuple&&, indices<Indices...>);
26 
27 
28 void
foo()29 foo()
30 {
31     f(tuple<int, char, unsigned> (), indices<2, 1, 0> ());
32 }
33