// { dg-do assemble } template <class R, void (R::* A) (void)> class s { public: s (R &r) : _r (r) {} void e (void) { (_r.*A) (); } private: R &_r; }; class x { public: void test1 (void) { int j = 0; } void test2 (void) { int j = 1; } }; int main (void) { x r; s<x, &x::test1> c4 (r); s<x, &x::test2> c5 (r); return 0; }