// { dg-do assemble } template struct S { typedef T S_Type; }; template void foo(typename S::S_Type) { } template void foo(T) { } struct S2 {}; void bar() { foo(S2()); // We can't unify with the first foo, so we get the second. }