内部编译器错误:g ++ 4.3.5的分段错误

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (182)

这是代码

   //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: internal compiler error: Segmentation fault

Please submit a full bug report, with preprocessed source if appropriate.

See < file:///usr/share/doc/gcc-4.3/README.Bugs > for instructions.

看起来像g ++ 4.3.5中的一个bug,g ++ 4.4及更高版本不会给出任何这种segfault。

代码本身有问题吗?

提问于
用户回答回答于

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

在内部类B中,传递函数指针不需要关键字typename,因为编译器在此时已知A <X,L>。

也许给这个类型前面的typename会导致编译器malform(可能是未定义的行为)。

用户回答回答于

内部错误意味着编译器内部出现了严重错误,这确实是错误的。暗示是你的代码坏了。

它在g+4.6和clang3.0中工作得很好。

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问5 回答
  • 找虫虫

    0 粉丝0 提问5 回答
  • 人生的旅途

    10 粉丝484 提问4 回答
  • 骑牛看晨曦

    4 粉丝522 提问4 回答

扫码关注云+社区

领取腾讯云代金券