C++ - Что можно сделать с внутренними ошибками компилятора?

Я столкнулся с чем-то интересным и раздражающим при программировании класса матрицы: внутренняя ошибка компилятора. Я был готов вызвать сестру конструктора в классе под названием Matrix4<T>::Matrix4(Matrix4<T>&&), Это кусок кода, который генерирует эту ошибку:

template<typename T>
Matrix4(Matrix4&& matrix_) = default;

template<typename T>
Matrix4<T>::Matrix4(T (&&matrix_)[4][4]):
    Matrix4({
        .data = {
            {matrix_[0][0], matrix_[0][1], matrix_[0][2], matrix_[0][3]},
            {matrix_[1][0], matrix_[1][1], matrix_[1][2], matrix_[1][3]},
            {matrix_[2][0], matrix_[2][1], matrix_[2][2], matrix_[2][3]},
            {matrix_[3][0], matrix_[3][1], matrix_[3][2], matrix_[3][3]}
        }
    })
{

}

И это внутренняя ошибка компилятора (компилятор - GCC, а IDE - Code:: Blocks):

внутренняя ошибка компилятора: в process_init_constructor_array, в cp/typeck2.c:1080

Возможно, компилятор не может успешно разобрать мой код. Я уверен, что с синтаксисом все в порядке. Что я могу сделать в этой ситуации?

1 ответ

Решение

Попробуйте скомпилировать его другим компилятором. Возможно, что в вашем коде есть очень тонкая ошибка, и другой компилятор может рассказать вам больше. Я рекомендую попробовать Clang, так как он широко рекламировался за лучшие сообщения об ошибках, хотя самые последние версии GCC стремятся изменить это понятие.

Если он не работает на обоих компиляторах без реального сообщения об ошибке, то у вас есть один из лучших тест-кодов для этой ошибки, и сообщество разработчиков компиляторов будет очень признательно за предоставление отчета об ошибке.

Другие вопросы по тегам