1 // { dg-options "-fabi-version=0" } 2 3 struct A { 4 template <typename T> int f (); 5 int operator+(); 6 operator int (); 7 template <typename T> 8 int operator-(); 9 }; 10 11 typedef int (A::*P)(); 12 13 template <P> struct S {}; 14 g(S<& T::template f<int>>)15template <typename T> void g (S<&T::template f<int> >) {} g(S<& T::operator+>)16template <typename T> void g (S<&T::operator+ >) {} g(S<& T::operator int>)17template <typename T> void g (S<&T::operator int>) {} g(S<& T::template operator-<double>>)18template <typename T> void g (S<&T::template operator- <double> >) {} 19 20 template void g<A> (S<&A::f<int> >); 21 template void g<A> (S<&A::operator+>); 22 template void g<A> (S<&A::operator int>); 23 template void g<A> (S<&A::operator-<double> >); 24 25 // { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_1fIiEEE } } 26 // { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_onplEE } } 27 // { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_oncviEE } } 28 // { dg-final { scan-assembler _Z1gI1AEv1SIXadsrT_onmiIdEEE } } 29