Приведение к неполному типу в C и С++

В режиме С и С++ компилируется без ошибок:

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 хотя бы предупреждение выдает.


Оригинальный пост | Disclaimer

Комментарии