// { dg-do run } extern "C" void abort (); namespace N { template T foo (T) { return T (); } template T bar (T t) { return foo (t); } } struct S { S (int i = 0): i_ (i) { } int i_; }; namespace N { /* template <> */ S foo (S) { return S (1); } } int main () { if (1 == N::bar (S()).i_) abort (); }