g ++ 2.9-gnupro-98r2, ошибка: внутренняя ошибка компилятора

Я сталкиваюсь с ошибкой компиляции с одной версией g ++ (2.9-gnupro-98r2) для LynxOS-178B 2.2.2, тогда как тот же код будет скомпилирован без нареканий с более новой версией g ++, например. 4.3.3 для VxWorks 653 2.4.0.2.

Следующий пример иллюстрирует проблему:

int function_1(int)
{
return 4;
}

double function_2(double)
{
return 2;
}

typedef int (*fp1)(int);
typedef double (*fp2)(double);

struct A
{
operator fp1()
{
return function_1;                       // conversion function to pointer to function
}

operator fp2()
{
return function_2;                      // conversion function to pointer to function
}

}a;

int call_to_class_object_1()
{
double i = a(3.6);                       // calls function_2 via pointer returned from conversion function
return i;
}

int call_to_class_object_2()
{
int i = a(6);                            // calls function_1 via pointer returned from conversion function
return i;
}

где я называю double i = a (3.6); и int i = a (6); Я получаю ошибку

Для 2.9-gnupro-98r2 я получаю:

../../src/Overloading_13_3_1_1_2_Call_to_object_of_class_type.cpp(30) : error: Internal compiler error.
../../src/Overloading_13_3_1_1_2_Call_to_object_of_class_type.cpp(30) : error: Please submit a Problem Report to Lynx Technical Support ([email protected]).
make[1]: *** [Overloading_13_3_1_1_2_Call_to_object_of_class_type.o] Error 1

Если одна версия компилятора принимает код, это не может быть полностью ошибочным. Я предполагаю, что он соответствует стандарту C ++, но более старый компилятор испытывал недостаток в надлежащей реализации того же самого.

  1. в чем именно проблема?:
  2. Существует ли переносимый способ написания такого кода, чтобы его принимало как можно больше компиляторов?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]