// { dg-do assemble  }

template <class T>
struct S1
{
  template <class U>
  struct S2 {};

  template <class X, class Y, class Z>
  void f(X, Y, Z)
    {
      S2<Z> s2z;
    }

  template <class X, class Z>
  void g(X, Z)
    {
      S2<Z> s2z;
    }
};


void h()
{
  S1<int> si;
  si.g(3, 4);
}
