Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!know!zaphod.mps.ohio-state.edu!wuarchive!uunet!brunix!sdm From: sdm@cs.brown.edu (Scott Meyers) Newsgroups: comp.std.c++ Subject: Re: Casting within MI Graphs Message-ID: <48362@brunix.UUCP> Date: 27 Aug 90 19:23:50 GMT References: <48168@brunix.UUCP> Sender: news@brunix.UUCP Reply-To: sdm@cs.brown.edu (Scott Meyers) Organization: Brown University Department of Computer Science Lines: 22 In article cline@sun.soe.clarkson.edu (Marshall Cline) writes: | In article <48168@brunix.UUCP> sdm@cs.brown.edu (Scott Meyers) writes: | > Does E&S prohibit explicit casts from pointers to virtual base classes to | > pointers to derived classes? | | Yes, these casts, even though explicit, are illegal. The July issue of | The C++ Report contains a C++ Puzzle solution showing why. Basically | there is no way of knowing at compile time how to perform the cast. The | cover article in the same issue shows a portable method of faking the | cast. The method requires maintaining run-time type information. Do you have a reference for where in E&S they are declared illegal? As I said, I found such a prohibition only in the commentary. Unfortunately, I don't have access to the C++ Report, but the commentary of E&S outlines an implementation for virtual base classes that makes it impossible to do downward casts such as I described, and I suspect this is the implementation discussed in the C++ Report. As the discussion in E&S implies, there are alternative implementations for virtual bases that allow for well-defined downward casts, but they require more memory per object. Scott