struct PM { int x1; int x2; void f1(); void f2(); PM clone(); }; int PM::* getDataMemberPointer(bool); typedef void (PM::*pmVoidVoid)(); pmVoidVoid getFunctionMemberPointer(bool); int usePM(int PM::* pm) { int acc; PM obj; // Needs fix for extractor bug CPP-313 //acc += obj.clone() .* getDataMemberPointer(true); //acc += (&obj) ->* getDataMemberPointer(true); (obj.clone() .* getFunctionMemberPointer(false))(); ((&obj) ->* getFunctionMemberPointer(true))(); acc += obj .* pm; acc += obj.clone() .* pm; return acc; }