// { dg-do assemble } template<int T> struct A { char *a; A (const char* x) { a = (char*) x; } }; template<int U, int V, class T> struct B { T a[V-U+1]; friend A<V-U+1> f (B const &x) { return A<V-U+1> ((char*) x.a); } }; const int a = 8; typedef B<1,a,int> C; struct D { C x; };