В режиме С и С++ компилируется без ошибок:
void* p = (struct this_does_not_exist *) -1;
Убираем struct
для С++ и получаем:
cast.cpp
cast.cpp(1) : error C2065: this_does_not_exist: необъявленный идентификатор
cast.cpp(1) : error C2059: синтаксическая ошибка: )
Теперь добавляем forward declaration:
class this_does_not_exist; void* p = (this_does_not_exist *) -1;
Тут все честно и компилируется без ошибок.
Скорое всего тут везде все по стандарту, но первый пример все-таки какой-то странный.
GCC хотя бы предупреждение выдает.