内部编译器错误:使用g ++ 4.3.5进行分段错误

时间:2012-03-22 08:34:54

标签: c++ g++

这是代码

   //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及更高版本不会给出任何这样的段错误。

你们觉得怎么样?代码本身有问题吗?

2 个答案:

答案 0 :(得分:1)

我在gcc 4.2中看到了类似的失败。正如其他人所说,内部错误意味着编译器内部出现了严重错误,暗示您的代码是错误的。

它在g ++ 4.6和clang 3.0中运行良好。

答案 1 :(得分:-1)

typename应该用作模板部分中类的替代。

在内部类B中,传递函数指针不需要关键字typename,因为A&lt; X,L&GT;那时编译器已经知道了。

也许在类型前面给出typename会导致编译器出错(可能是未定义的行为?)。