SGI C++ 2.0 Polymorphic Reference Bug

Robert Skinner robert at texas.asd.sgi.com
Wed Mar 13 07:33:59 AEST 1991


In article <1688 at contex.UUCP>, jeff at contex.UUCP (Jeff Carey) writes:
|> 
|> 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 at uunet.uu.net


no, its not a bug.  I'll let one of our compiler wizards explain the
details, but here's my rationalization:

You've declared rmw to be a MW, and the compiler treats it as one,
calling MW::f() directly.  (I think of the '&' operator as a
convenience.  I really don't know what effect it has here.)
Polymorphism is only supported for pointers, where the compiler doesn't
really know what subclass the pointer really points at.

-- 
Robert Skinner
robert at sgi.com

	Some rich men came and raped the land,
	nobody caught 'em.
	Put up a bunch of ugly boxes, 
	and Jesus people bought 'em.

	They call it Paradise, I don't know why.
	You call someplace Paradise, kiss it goodbye.

			- The Eagles



More information about the Comp.sys.sgi mailing list