Отвал компилятора
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 21.08.08 07:54
Оценка: 8 (1) :)
Всем привет!

Наткнулся тут на ситуацию когда в VC 2005, отвлаивается компилятор при попытке скомпилить следующий код:
class A
{
public:
    enum A_E
    {
        a1,
        a2, 
        a3
    };
};

class B
{
public:
    typedef A::A_E B_E;
};

int main()
{
    return B::B_E::a1;
}


Результат компиляции:
d:\projects\test1\test1\test1.cpp(22) : fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'msc1.cpp', line 1393)
To work around this problem, try simplifying or changing the program near the locations listed above.
Please choose the Technical Support command on the Visual C++

интересно наблюдается ли подобная проблема в других версиюях студии, может она у меня кривая просто? И в других компиляторах. Известно ли microsoft об этой ошибке?
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re: Отвал компилятора
От: kvser  
Дата: 21.08.08 08:01
Оценка: 2 (1)
Здравствуйте, Phoenics, Вы писали:

P>
P>class A
P>{
P>public:
P>    enum A_E
P>    {
P>        a1,
P>        a2, 
P>        a3
P>    };
P>};

P>class B
P>{
P>public:
P>    typedef A::A_E B_E;
P>};

P>int main()
P>{
P>    return B::B_E::a1;
P>}
P>


P>интересно наблюдается ли подобная проблема в других версиюях студии, может она у меня кривая просто? И в других компиляторах. Известно ли microsoft об этой ошибке?


компилятор gcc здесь
Автор: kvser
Дата: 13.08.08

так и плюнул на это дело
Re: Отвал компилятора
От: Аноним  
Дата: 21.08.08 16:23
Оценка:
Здравствуйте, Phoenics, Вы писали:

P>Всем привет!


P>Наткнулся тут на ситуацию когда в VC 2005, отвлаивается компилятор при попытке скомпилить следующий код:

P>...
P>интересно наблюдается ли подобная проблема в других версиюях студии, может она у меня кривая просто? И в других компиляторах. Известно ли microsoft об этой ошибке?


VC 2008 с недавно вышедшим SP1 — тот же результат
Re: Отвал компилятора
От: quodum  
Дата: 22.08.08 09:27
Оценка: +1
Здравствуйте, Phoenics, Вы писали:

[]

P>интересно наблюдается ли подобная проблема в других версиюях студии, может она у меня кривая просто? И в других компиляторах. Известно ли microsoft об этой ошибке?


Какая проблема? Диагностику нормальную не показывает? Код-то неверный.

Правильно так:
int main()
{
    return B::a1;
}
Re[2]: Отвал компилятора
От: Phoenics Россия https://sourceforge.net/projects/phengine
Дата: 22.08.08 14:08
Оценка:
Здравствуйте, quodum, Вы писали:

Q>Какая проблема? Диагностику нормальную не показывает? Код-то неверный.


Проблема выглядит не только как сообщение в окне вывода, но и как исключение ms-ного компилятора с предложением отправить крэшдамп майкософт. Хорошие программы себя так не ведут
---=== С наилучшими пожеланиями, Phoenics ===---
_
Re[3]: Отвал компилятора
От: Were  
Дата: 22.08.08 14:21
Оценка: +2
Здравствуйте, Phoenics, Вы писали:

P>Здравствуйте, quodum, Вы писали:


Q>>Какая проблема? Диагностику нормальную не показывает? Код-то неверный.


P>Проблема выглядит не только как сообщение в окне вывода, но и как исключение ms-ного компилятора с предложением отправить крэшдамп майкософт. Хорошие программы себя так не ведут


MS-овский компилятор вообще славится таким поведением. Особенно он не любит шаблоны )
Re: Отвал компилятора
От: rg45 СССР  
Дата: 23.08.08 09:36
Оценка: 12 (1)
Здравствуйте, Phoenics, Вы писали:

P>...

Понятно, такому поведению компилятора нет оправдания. Что же касается приведенного примера, можно сделать перечисление анонимным, обернуть его в структуру, которой присвоить отобранное у перечисления имя. Таким образом можно эмулировать пространства имен у перечислений:
class A
{
public:
  struct A_E
  {
    enum 
    {
        a1,
        a2, 
        a3
    };
  };
};

class B
{
public:
    typedef A::A_E B_E;
};

int main()
{
    return B::B_E::a1;
}

Если мне не изменяет память, что-то подобное когда-то предлагал remark.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.