// { dg-do assemble } // Testcase for proper unification of code involving references. template struct A { void foo(); }; template void A::foo() { } template class A; const int& f1 (); int& f2 (); int f3 (); template void g1 (const T&); template void g2 (T&); template void g3 (T); int main() { g1 (f1 ()); g1 (f2 ()); g1 (f3 ()); g2 (f2 ()); g3 (f1 ()); g3 (f2 ()); g3 (f3 ()); }