// { 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;
};