// { dg-do assemble  }

template <class T>
struct S
{
  typedef T S_Type;
};


template <class T>
void foo(typename S<T>::S_Type)
{
}


template <class T>
void foo(T)
{
}


struct S2 {};

void bar()
{
  foo(S2()); // We can't unify with the first foo, so we get the second.
}
