Внутренняя ошибка компилятора: ошибка сегментации с g ++ 4.3.5 - PullRequest
16 голосов
/ 22 марта 2012

Вот код

   //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: внутренняя ошибка компилятора: ошибка сегментации
Пожалуйста, отправьте полный отчет об ошибке, с предварительно обработанным источником, если это необходимо.
Инструкции см. в .

Для меня это ошибкаg ++ 4.3.5, g ++ 4.4 и выше не дают такой ошибки.

Что вы, ребята, думаете?Что-то не так с самим кодом?

Ответы [ 2 ]

1 голос
/ 01 апреля 2012

Я вижу похожую ошибку с gcc 4.2.Как уже говорили другие, внутренняя ошибка означает, что внутри компилятора что-то пошло не так, что не означает, что это ваш код, который был плохим.

Он отлично работает в g ​​++ 4.6 и clang 3.0.

0 голосов
/ 28 марта 2012

typename следует использовать в качестве замены для класса в разделе шаблона.

Во внутреннем классе B для передачи указателя на функцию не требуется ключевое слово typename, поскольку A уже известнокомпилятор в этот момент.

И, возможно, присвоение typename перед типом приводит к неправильной работе компилятора (может быть неопределенное поведение?).

...