1 // PR c++/56821
2 // { dg-require-effective-target c++11 }
3
4 struct A {
5 // { dg-final { scan-assembler "_ZNR1A1fEv" } }
fA6 void f() & {}
7 // { dg-final { scan-assembler "_ZNO1A1gEv" } }
gA8 void g() && {}
9 // { dg-final { scan-assembler "_ZNKR1A1hEv" } }
hA10 void h() const & {}
11 };
12
13 // { dg-final { scan-assembler "_Z1jM1AFvvRE" } }
j(void (A::*)()&)14 void j(void (A::*)() &) { }
15 // { dg-final { scan-assembler "_Z1kM1AFvvOE" } }
k(void (A::*)()&&)16 void k(void (A::*)() &&) { }
17 // { dg-final { scan-assembler "_Z1lM1AKFvvRE" } }
l(void (A::*)()const &)18 void l(void (A::*)() const &) { }
19
20 // { dg-final { scan-assembler "_Z1mIFvvOEEvM1AT_" } }
21 // { dg-final { scan-assembler "_Z1mIFvvREEvM1AT_" } }
22 // { dg-final { scan-assembler "_Z1mIKFvvREEvM1AT_" } }
23 template <typename T>
m(T A::*)24 void m(T A::*) {}
25
26 // { dg-final { scan-assembler "_Z1nIM1AFvvOEEvT_" } }
27 // { dg-final { scan-assembler "_Z1nIM1AFvvREEvT_" } }
28 // { dg-final { scan-assembler "_Z1nIM1AKFvvREEvT_" } }
29 template <typename T>
n(T)30 void n(T) {}
31
main()32 int main()
33 {
34 j(&A::f); k(&A::g); l(&A::h);
35 m(&A::f); m(&A::g); m(&A::h);
36 n(&A::f); n(&A::g); n(&A::h);
37 }
38