我在 LynxOS-178B 2.2.2 的一个 g++ 版本 (2.9-gnupro-98r2) 中遇到编译错误,而对于新版本的 g++,例如 VxWorks 653 2.4 的 4.3.3,将编译相同的代码而不会抱怨。 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 (support@lynx.com).
make[1]: *** [Overloading_13_3_1_1_2_Call_to_object_of_class_type.o] Error 1
如果一个编译器版本接受该代码,则它不可能完全错误。我的猜测是它符合 C++ 标准,但旧的编译器缺乏相同的正确实现。
- 究竟是什么问题?
- 是否有一种可移植的方式来编写这种代码,以便尽可能多的编译器接受它?