Сравнивает ли два указателя void на разные объекты, определенные в C ++?

На основе этого ответа о динамическом преобразовании в 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 * всегда определенных или требуется, чтобы они содержали указатель на допустимый объект / область памяти?

14
задан Community 23 May 2017 в 12:08
поделиться