#include struct B { int X; void i() { printf("i, %d\n", X); } void j() { printf("j, %d\n", X); } }; void foo(int V, void (B::*Fn)()) { B b; b.X = V; (b.*Fn)(); } int main() { foo(4, &B::i); foo(6, &B::j); foo(-1, &B::i); return 0; }