Сегодня VS2003SP1 дал мне C1001 (Внутренняя ошибка компилятора) с жалобой на файл компилятора 'msc1.cpp', строка 2708) из-за этого:
struct PATTERN {
…
};
Оказывается, проблема заключалась в том, что имя структуры, которое я пытался определить (PATTERN), уже было typedef в GDI для типа кисти. Однако вместо того, чтобы сказать мне, что символ уже определен (как он это делает для большинства других вещей), он не только не указал на структуру как на проблему - я сузил проблему до нее, выборочно комментируя блоки, пока ошибка не исчезла - но это также дало мне вышеупомянутую загадочную ошибку, которая не имеет ничего общего с указанным файлом - которую я даже не могу найти, чтобы исследовать данную строку. : |
Я смог воспроизвести его с помощью следующего кода:
typedef int SOMETHINGOROTHER;
struct SOMETHINGOROTHER {};
> fatal error C1001: INTERNAL COMPILER ERROR
> (compiler file 'msc1.cpp', line 2708) …
Принимая во внимание, что следующий код дает ожидаемое сообщение об ошибке:
struct SOMETHINGOROTHER {};
typedef int SOMETHINGOROTHER;
> 'SOMETHINGOROTHER' : redefinition; different basic types
Очевидно, что проблема в процедуре обработки структуры компилятора.
Интересно, будет ли VS2005 + лучше…