2012-06-27 5 views
2

В чем разница между двумя отмеченными строками в коде ниже?В чем разница между этими двумя typedefs?

template <const char *N> struct A { 
    static const char *p; 
    }; 

template <class T> struct B { 
    static const char c[1]; 
    typedef A<B<T>::c> C; // <--- 
    // typedef A<c> C;  // <--- 
    }; 

Ошибка, что я RECIVED является:

test_t.C: In instantiation of 'const char B::c [1]':
test_t.C:7: instantiated from here
test_t.C:7: internal compiler error: in instantiate_decl, at cp/pt.c:15628
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.

+14

Почему люди настаивают на пометке вопросов тегом [tag: c], когда он явно не может быть C-кодом, потому что он использует такие вещи, как шаблоны? –

+5

Я уверен, что нет никакой разницы. Почему, по-вашему, есть один? –

+1

@ R.MartinhoFernandes, я почти уверен, что это из-за этой бессмыслицы «C/C++». – Griwes

ответ

6

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

+0

Ну, вы можете написать отчет об ошибке, чтобы увеличить вероятность исправления ошибки, а не просто надеяться на лучшее *. Вы делаете свою собственную удачу здесь (или, по крайней мере, можете иметь эффект) –

+0

@ DavidRodríguez-dribeas: достаточно справедливо; возможно, я слишком циничен ;-) Стандартный компилятор NDK - это несколько небольших выпусков за текущей версией GCC, поэтому в этом случае небезосновательно предположить, что проблема уже исправлена ​​в магистрали и просто ожидая слияния и нового выпуска от Google. – Rook

2

Ваш компилятор имеет ошибку, и не составить первую форму.

Поскольку эти две формы эквивалентны, вы можете обойти ошибку, используя вторую форму. Возможно, стоит попробовать более новую версию компилятора (если таковая имеется), чтобы проверить, исправлена ​​ли ошибка.

Смежные вопросы