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