1// { dg-do assemble  }
2// GROUPS passed templates
3template<int N_rank>
4class Array;
5
6
7template<class T>
8class ArraySectionInfo {
9public:
10    enum { rank = 0 };
11};
12
13
14template<class T1>
15class SliceInfo {
16public:
17    enum {
18        rank          = ArraySectionInfo<T1>::rank
19    };
20
21    typedef Array<rank> T_slice;
22};
23
24template<class T2>
25typename  SliceInfo<T2>::T_slice
26foo(T2 r2)
27{
28  return SliceInfo<T2>::T_slice();
29}
30
31