Внутренняя ошибка компилятора: ошибка сегментации с g++ 4.3.5 - программирование
Подтвердить что ты не робот

Внутренняя ошибка компилятора: ошибка сегментации с g++ 4.3.5

Вот код

   //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: внутренняя ошибка компилятора: ошибка сегментации
Отправьте полный отчет об ошибке, с предварительно обработанным источником, если это необходимо.
См. < файл:///usr/share/doc/gcc-4.3/README.Bugs > для инструкций.

Похож на ошибку для меня в g++ 4.3.5, g++ 4.4 и выше не дают такого segfault.

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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