// { dg-do assemble  }

// Here we declare ::S
typedef struct s1 *S;

struct s1
{
  int s;
};

struct A
{
  // Here we declare A::S
  typedef struct s1 *S;
};

template<class T, class U> class XX;

template<class T, class U> // { dg-error "" }
class X
{
public:
  static T *do_something ();
  friend class T; // { dg-error "" } `T' is a template parameter
  friend class XX<T, U>;
};

struct N
{
  // Here we declare N::S
  class S
  {
  };

  // Should use N::S and A::S.
  typedef X<S, A::S> X_S;

  void bug ();
};

void
N::bug ()
{
  // X_S is template class X<N::S, A::S>
  // `s' is N::S.
  S *s = X_S::do_something ();
}

