2012-06-27 6 views
2

아래 코드에서 두 개의 표시된 줄의 차이점은 무엇입니까?이 두 typedef의 차이점은 무엇입니까?

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

사람들이 [태그 : c] 태그를 사용하여 질문에 태그를 지정하는 이유는 템플릿과 같은 것을 사용하기 때문에 명확하게 C 코드가 될 수없는 이유는 무엇입니까? –

+5

나는 차이가 없다고 확신한다. 왜 거기 있다고 생각하니? –

+1

@ R.MartinhoFernandes, 그게 전부 "C/C++"난센스 때문이라고 확신합니다. – Griwes

답변

6

"내부 컴파일러 오류" 대략 "당신은 공급하고 있습니다 깨진 코드, 합리적인하지만 혼란 코드로 변환합니다. 어느 쪽이든, 당신은 운입니다. 최선을 다해 다음 릴리스 버전과 희망을 얻을하시기 바랍니다 . "

+0

글쎄, 실제로 버그 리포트를 작성하여 최선의 결과를 기대하기보다는 버그가 수정 될 확률을 높일 수 있습니다. 너는 너의 자신의 운을 여기에 만든다 (또는 적어도 너는 효력이있을 수 있는다) –

+0

@ DavidRodríguez-dribeas : 충분히 공정하게; 아마도 나는 조금 냉소적이다 ;-) 표준 NDK 컴파일러는 현재 버전의 GCC 뒤에 약간의 부 릴리스가 있기 때문에이 경우 문제가 이미 메인 라인에서 수정되었다고 가정하는 것이 무리가 아니다. Google에서 병합 및 새로 출시하기를 기다리고 있습니다. – Rook

2

귀하의 컴파일러는 버그를 가지고 있으며, 첫 번째 양식을 컴파일에 실패 : 내가 recived

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;  // <--- 
    }; 

오류입니다.

두 양식이 동일하므로 두 번째 양식을 사용하여 버그를 해결할 수 있습니다. 또한 버그가 수정되었는지 확인하기 위해 최신 컴파일러 버전 (있는 경우)을 시도해 볼 가치가 있습니다.

관련 문제