Ответ 1
Я вижу аналогичный сбой gcc 4.2. Как говорили другие, внутренняя ошибка означает, что внутри компилятора что-то пошло не так, что означает не, что это плохой код.
Он отлично работает в g ++ 4.6 и clang 3.0.
Вот код
//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.
Что вы, ребята, думаете? Что-то не так с самим кодом?
Я вижу аналогичный сбой gcc 4.2. Как говорили другие, внутренняя ошибка означает, что внутри компилятора что-то пошло не так, что означает не, что это плохой код.
Он отлично работает в g ++ 4.6 и clang 3.0.
typename следует использовать в качестве замены класса в разделе шаблона.
Во внутреннем классе B передача указателя функции не требует ключевого слова typename, поскольку A < X, L > уже известен компилятору в этой точке.
И, возможно, присвоение имени типа перед типом приводит к неправильному составлению компилятора (может быть поведение undefined?).