这是代码
//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:内部编译错误:分段错误
请提交完整的错误报告, 如果合适,使用预处理来源 见&lt; file:///usr/share/doc/gcc-4.3/README.Bugs>有关说明。
在g ++ 4.3.5中看起来像是一个bug,g ++ 4.4及更高版本不会给出任何这样的段错误。
你们觉得怎么样?代码本身有问题吗?
答案 0 :(得分:1)
我在gcc 4.2中看到了类似的失败。正如其他人所说,内部错误意味着编译器内部出现了严重错误,不暗示您的代码是错误的。
它在g ++ 4.6和clang 3.0中运行良好。
答案 1 :(得分:-1)
typename应该用作模板部分中类的替代。
在内部类B中,传递函数指针不需要关键字typename,因为A&lt; X,L&GT;那时编译器已经知道了。
也许在类型前面给出typename会导致编译器出错(可能是未定义的行为?)。