struct Object{
int foo(int *a){return 0;}
int bar(int *a){return 1;}
};
typedef int (Object::*ObjFPtrType)(int *);
typedef int (Object::*&ObjFPtrTypeRef)(int *);
void setFnPtr(ObjFPtrType* p)
{
*p = &Object::foo;
}
void setFnPtrRef(ObjFPtrTypeRef r)
{
r = &Object::bar;
}
int main() {
ObjFPtrType p1 = 0;
setFnPtr(&p1);
ObjFPtrTypeRef p2 = p1;
setFnPtrRef(p2);
}
ICAgIHN0cnVjdCBPYmplY3R7CiAgICAgICBpbnQgZm9vKGludCAqYSl7cmV0dXJuIDA7fQogICAgICAgaW50IGJhcihpbnQgKmEpe3JldHVybiAxO30KICAgIH07CgogICAgdHlwZWRlZiBpbnQgKE9iamVjdDo6Kk9iakZQdHJUeXBlKShpbnQgKik7CiAgICB0eXBlZGVmIGludCAoT2JqZWN0OjoqJk9iakZQdHJUeXBlUmVmKShpbnQgKik7CgogICAgdm9pZCBzZXRGblB0cihPYmpGUHRyVHlwZSogcCkKICAgIHsKICAgIAkqcCA9ICZPYmplY3Q6OmZvbzsKICAgIH0KCiAgICB2b2lkIHNldEZuUHRyUmVmKE9iakZQdHJUeXBlUmVmIHIpCiAgICB7CiAgICAJciA9ICZPYmplY3Q6OmJhcjsKICAgIH0KCiAgICBpbnQgbWFpbigpIHsKCiAgICAgICAgT2JqRlB0clR5cGUgcDEgPSAwOwogICAgICAgIHNldEZuUHRyKCZwMSk7CiAgICAgICAgCiAgICAgICAgT2JqRlB0clR5cGVSZWYgcDIgPSBwMTsKICAgICAgICBzZXRGblB0clJlZihwMik7CiAgICB9Cg==