Re: dynamic_cast undefined behavior
Am 20.07.2013 02:02, schrieb kawninzx6@googlemail.com:
Is it ever safe to dereference a NULL pointer?
There exists at least one guaranteed valid application of dereferencing
a null pointer, namely by invokation of typeid with a polymorphic
runtime value, e.g. in the following scenario:
#include <iostream>
#include <typeinfo>
struct B {
virtual ~B() {}
};
struct D : B {};
void foo(B* p) {
auto& type = typeid(*p);
std::cout << type.name();
}
int main() {
try {
foo(0);
} catch (const std::bad_typeid&) {
std::cout << "Expected exception!" << std::endl;
}
}
This is safe and valid according to [expr.typeid] p3:
"When typeid is applied to a glvalue expression whose type is a
polymorphic class type (10.3), the result refers to a std::type_info
object representing the type of the most derived object (1.8) (that is,
the dynamic type) to which the glvalue refers. If the glvalue expression
is obtained by applying the unary * operator to a pointer and the
pointer is a null pointer value (4.10), the typeid expression throws an
exception (15.1) of a type that would match a handler of type
std::bad_typeid exception (18.7.3)."
Specifically,
I'm curious about dereferencing NULL during dynamic_cast.
The language does not allow this for dynamic_cast (I think this is a bit
unfortunate given the very similar "polymorphic nature" of dynamic_cast
and type_id).
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]