1*c87b03e5Sespie // Test for nested template template parameter feature
2*c87b03e5Sespie 
3*c87b03e5Sespie template <template<template <class> class> class TTT> struct C
4*c87b03e5Sespie {
fC5*c87b03e5Sespie 	int f() { return 0; }
6*c87b03e5Sespie };
7*c87b03e5Sespie 
8*c87b03e5Sespie template <template <class> class TT> struct D
9*c87b03e5Sespie {
10*c87b03e5Sespie 	int	a;
11*c87b03e5Sespie };
12*c87b03e5Sespie 
13*c87b03e5Sespie template <template <class> class TT> struct E
14*c87b03e5Sespie {
15*c87b03e5Sespie 	int	a;
16*c87b03e5Sespie 	int	b;
17*c87b03e5Sespie };
18*c87b03e5Sespie 
19*c87b03e5Sespie template <template <template <template<class> class> class> class TTT>
g(TTT<E> t)20*c87b03e5Sespie int g(TTT<E> t)
21*c87b03e5Sespie {
22*c87b03e5Sespie 	TTT<D> tt;
23*c87b03e5Sespie 	return tt.f();
24*c87b03e5Sespie }
25*c87b03e5Sespie 
main()26*c87b03e5Sespie int main()
27*c87b03e5Sespie {
28*c87b03e5Sespie 	C<E> c;
29*c87b03e5Sespie 	g(c);
30*c87b03e5Sespie }
31