calder@uluru.UUCP (06/05/87)
I have had a few problems with pointers to member functions in
version 1.2 of the C++ translator. Specifically, there seem to
be bugs in using local variables of type "pointer-to-member-function",
especially if the class concerned has virtual member functions.
Here is a simple example.
struct S {
virtual void f() { }
} s;
void (S::*p)() = &S::f; // works fine if p is global
int main() {
(s.*p)();
}
But now try making p local to main.
struct S {
virtual void f() { }
} s;
int main() {
void (S::*p)() = &S::f; // "syntax error" if p is local
(s.*p)();
}
OK then, why not make a global typedef and a local variable?
struct S {
virtual void f() { }
} s;
typedef void (S::*pf)();
int main() {
pf p = &S::f;
(s.*p)();
} // "bus error (or something nasty...)"
Note that if S::f is not virtual, all is well. (Also note that this used to
work fine under version 1.1)
Is this a bug, or am I missing something?
Paul Calder (calder@uluru.stanford.edu)
Stanford University, Centre for Integrated Systems, Computer Systems Lab.