This code is wrong but generates an internal compiler error. template <class A> struct Sig { typedef void (*Func)(A); Func f_; void call(A& a) {f_(a);} Sig(Func f):f_(f) {} template <class A> struct Sig { typedef void (*Func)(A&); Func f_; void call(A a) {f_(a);} Sig(Func f):f_(f) {} }; --Karl