示例代码如下:
struct TEMP
{
int j;
TEMP()
{
j = 0;
}
};
template<typename T>
class classA
{
struct strA
{
long i;
strA():i(0) {}
};
static strA obj_str;
classA();
};
template<typename T>
classA<T>::classA()
{}
template<typename T>
classA<TEMP>::strA classA<TEMP>::obj_str;
int main()
{
return 0;
}
在编译此代码时,我会得到以下错误:
test1.cpp:32:内部编译器错误:在import_export_decl中,at cp/decl2.c:1970请提交一个完整的错误报告,并在适当情况下提供预处理的源代码。有关说明,请参见http://bugzilla.redhat.com/bugzilla>。预处理源存储在/tmp/ccUGE0GW.out文件中,请将其附加到您的bugreport中。
我正在x86_64-redhat-linux机器上构建这个代码,gcc版本是gcc版本4.1.2 20070626 (RedHat4.1.2-14)
请注意,此代码已经在i 386-redhat-linux机器上用gcc版本3.4.5 20051201 (RedHat3.4.5-2)构建。
不知道为什么这不能和gcc一起建4.1.2。
提前谢谢。
发布于 2009-09-30 10:47:07
在任何情况下,您的代码在下面的声明中都没有多大意义。
template<typename T>
classA<TEMP>::strA classA<TEMP>::obj_str;
因为声明中没有使用T
参数。我想你要么想写一件事:
// definition of static member of template
template<typename T>
typename classA<T>::strA classA<T>::obj_str;
// ... or declaration of static member specialization for `T=TEMP` of template
template<>
classA<TEMP>::strA classA<TEMP>::obj_str;
我怀疑这是第一次。对于编译器崩溃,在任何情况下都不应该发生这种情况:)
编辑:这个bug至少在4.4.1中已经修复了--我认为不再需要报告了。
发布于 2009-09-30 10:46:07
我会跟踪错误报告。
https://stackoverflow.com/questions/1497325
复制相似问题