0

C++ 템플릿 작업 내에 가상 함수가 있고 Visual Studio 2015 (모든 디버그/릴리스 및 x86/x64 조합 시도)에서 컴파일 될 때 가상 함수가 있습니다. 그것은 지속적으로 코드의 다음 줄에 컴파일러 오류 C1001와 함께 실패 e_Ty 클래스의 템플릿 매개 변수입니다오류 C1001 : 컴파일러에서 내부 오류가 발생했습니다.

e_Ty *d(new e_Ty[l]); 

. 이 오류는 이 std::pair<const int &, int &>으로 설정된 템플릿 클래스를 사용할 때만 발생합니다. 왜 이것이 작동하지 않아야하는 합법적 인 이유가 있습니까? 아니면 MSVC의 버그입니까?


EDIT

주 :

  • l는 미리 선언 (및 함수 호출의 결과 값이 지정) 된 로컬 변수이다.
  • auto을 사용하여 비활성화 최적화를 사용하고 할당 스타일 초기화를 사용해 보았습니다. 아무 것도 작동하지 않았습니다.
  • e_Tyint 일 때 코드가 잘 컴파일됩니다.
+0

어쨌든 잘못 구성된 코드입니다. 어떤 것에도 바인딩하지 않고 정확히 한쌍의 참조를 만드는 방법은 무엇입니까? –

+0

@ T.C .: 감사합니다. 유형이 저에게 등록하지 않았습니다. 그에 따라 내 대답이 수정되었습니다. –

+0

@ T.C. 고맙습니다.'std :: pair '을 사용하도록 변경했으며 효과가있었습니다. –

답변

4

내부 컴파일러 오류, ICE항상 버그입니다.

Microsoft Connect를 통해 신고하십시오.


문제의 코드,

e_Ty *d(new e_Ty[l]); 

중 & hellip; l에 따라 올바른 헤더가 포함되었는지 여부 등이 다를 수 있습니다. 너무 작은 문맥이 있습니다. 참조 번호가 noted by T.C.과 같이 초기화되어야하므로 에 대해서는 std::pair 개의 참조가 유효하지 않으므로은 유효하지 않습니다. 그러나 ICE는 중요하지 않습니다.

+0

감사합니다. Microsoft에 제출해 주셔서 감사합니다. 또한, 나는'l'이 지역 변수이고'int'와 함께 작동한다는 것을 명확히하기 위해 나의 질문을 편집했다. –

+1

_ 내부 컴파일러 오류 인 ICE는 항상 버그입니다. _ 누군가는 어쨌든 _a feature_라고 부릅니다. :-) – skypjack

+0

좋은 재현 방법에 대한 자세한 내용은 [이 기사] (https://support.microsoft.com/en-us/kb/974229)를 참조하십시오. –

관련 문제