На основе этого ответа о динамическом преобразовании в void *
:
... bool eqdc (B * b1, B * b2) { return dynamic_cast
(b1) == dynamic_cast (b2); } ... int main () { DD * dd = new DD (); D1 * d1 = dynamic_cast (dd); D2 * d2 = dynamic_cast (dd); ... eqdc (d1, d2) ... {{1} }
Мне интересно, является ли это полностью определенным поведением в C ++ (согласно стандарту 03 или 11), чтобы сравнить два недействительных указателя на (не) равенство , которые указывают на действительный , но разные объекты .
В более общем плане, но, возможно, не столь актуально, это сравнение ( ==
или ! =
) двух значений типа void *
всегда определенных или требуется, чтобы они содержали указатель на допустимый объект / область памяти?