jeff@contex.UUCP (Jeff Carey) (03/13/91)
I am using:
System release: IRIX Release 4D1-3.3.1
C++ release: S4-C++-2.0
Software Option: C++ Translator Version 2.0
on a Silicon Graphics PI.
The other day I was testing the code found in the discussion
of "Virtual Base Classes with Virtual Functions", section 10.10c, pp. 233-4,
of _The_Annotated_C++_Reference_Manual_ and found the following bug. You'll
notice that the bug is in the call made to f() from the MW object reference
(MW&).
---------------------- beginning of test.c++ code ----------------------------
#include <iostream.h>
class W { public: virtual void f() { cout << "W::f\n"; } };
class MW : public virtual W {};
class BW : public virtual W { public: void f() { cout << "BW::f\n"; } };
class BMW : public BW, public MW {};
main()
{
BMW bmw;
MW* pmw = &bmw;
pmw->f();
MW& rmw = bmw;
rmw.f();
return(0);
}
----------------------------- end of test code -------------------------------
I got this result:
$ test
BW::f
W::f
I would have predicted and hoped that the two lines of diagnostics would
result in the same text.
This is a bug isn't it...polymorphism of this sort should be supported by
references as well as pointers, right?!
Ouch ---
jeff
--
------------------------
Jeff Carey
contex!jeff@uunet.uu.net