|
Boost : |
From: Fernando Cacciola (fcacciola_at_[hidden])
Date: 2002-04-25 09:28:24
"Peter Dimov" <pdimov_at_[hidden]> wrote in message
news:007701c1ec5e$546a2d10$1d00a8c0_at_pdimov2...
> From: "Fernando Cacciola" <fcacciola_at_[hidden]>
> > True, but what is the semantic of an implicit conversion?
> > In particular, if under a given circumstance, a static_cast<> yields the
> > wrong value, how could a conversion without a cast do it right? If the
> > compiler knows how to do it right for the implicit conversion (or for
any
> > other conversion/cast without RTTI), then it would
> > certainly do it right for the static_cast<> too, wouldn't it?
>
> How could the implicit conversion yield the wrong value? C++ would be
> unusable. static_cast can yield the wrong value only when downcasting, but
> this is an upcast, the pinnacle of IS-A etc.
>
Oops, I meant "upcast" in my reply, which is the case we are considering,
not "downcast" :-) (That is, from Derived* to Base*)
I think (or thought, perhaps) that any non-dynamic conversion along a
hierarchy, whatever the direction, is only guaranteed to yield the correct
value iif the hierarchy doesn't involve virtual base classes combined with
multiple inheritance (except when upcast is straight to a root type).
I don't think this means that C++ unusable, because we have dynamic_cast<>.
I always use dynamic_cast<> for polymorphic casts regardless the direction
(since the day I discovered Borland doing the upcast wrong with
static_cast<>).
Anyway, I'm likely wrong because (a) I'm basing this on the particular
behavior of an older version of my compiler, (b) you two couldn't be wrong
at the same time :-)
So, I'm going to embarrass myself asking this on c.l.cpp.m just to make sure
I'm wrong.
-- Fernando Cacciola Sierra s.r.l. fcacciola_at_[hidden] www.gosierra.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk