以下是代码
//fail_.cpp
template< unsigned char X, class L>
class A {
public:
typedef void (A::*fptr)();
class B {
public: B(typename A< X, L> ::fptr );
};
};
template < unsigned char X, typename L >
A<X,L>::B::B ( fptr ) { }
g++ -c fail_.cpp
给出
fail_.cpp:11:内部编译器错误:分段错误
请提交完整的错误报告,如果合适,请提供预处理的来源。
有关说明,请参阅< file:///usr/share/doc/gcc-4.3/README.Bugs >。
在我看来,g++4.3.5是个bug,g++4.4和更高版本不会给出任何这样的段错误。
你们觉得怎么样?代码本身有什么问题吗?
发布于 2012-04-01 12:50:36
我在gcc 4.2中看到了类似的失败。正如其他人所说的那样,内部错误意味着编译器内部出现了严重的错误,这并不意味着错误的代码就是。
它在g++ 4.6和Clang3.0中运行良好。
发布于 2012-03-29 03:50:59
typename应该用来代替template部分中的class。
在内部类B中,传递函数指针不需要关键字typename,因为此时编译器已经知道A< X,L>。
也许在类型前面提供typename会导致编译器格式错误(可能是未定义的行为?)。
https://stackoverflow.com/questions/9818751
复制相似问题