// { dg-do assemble  }
template <class T>
struct S1
{
};
template <class T>
struct S2
{
  typedef T* pointer_t;
};
int f(S2<S1<int> >::pointer_t p1, S2<S1<int> >::pointer_t p2)
{
  return (int) (p1 - p2);
}
// { dg-do assemble  }
template <class T>
struct S1
{
};
template <class T>
struct S2
{
  typedef T* pointer_t;
};
int f(S2<S1<int> >::pointer_t p1, S2<S1<int> >::pointer_t p2)
{
  return (int) (p1 - p2);
}