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  static const int rank = ArraySectionInfo<T1>::rank;
18
19  typedef Array<rank> T_slice;
20};
21
22template<class T2>
23typename  SliceInfo<T2>::T_slice
24foo(T2 r2)
25{
26  return SliceInfo<T2>::T_slice();
27}
28
29