示例代码如下:
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中,在cp / decl2.c:1970 请提交完整的错误报告, 如果合适,使用预处理的来源。 见http://bugzilla.redhat.com/bugzilla>作为指示。 存储在/tmp/ccUGE0GW.out文件中的预处理源,请将其附加到您的bug报告中。
我在x86_64-redhat-linux机器上构建此代码,gcc版本是gcc版本4.1.2 20070626(Red Hat 4.1.2-14)
请注意,此代码已在i386-redhat-linux机器上使用gcc版本3.4.5 20051201(Red Hat 3.4.5-2)构建。
知道为什么这不能用gcc 4.1.2构建。
提前致谢。
答案 0 :(得分:3)
在任何情况下,您的代码在以下声明中都没有多大意义。
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;
我怀疑这是第一个。对于编译器崩溃 - 在任何情况下都肯定不会发生:)
编辑:该错误至少已在4.4.1中得到修复 - 我认为不再需要报告了。
答案 1 :(得分:0)
我会关注错误报告。