Sun Studio 12.1 및 새로운 컴파일러 [CC : Sun C++ 5.10 SunOS_sparc 2009/06/03]로 마이그레이션 중입니다. 이전 버전의 Sun Compiler [CC : Sun WorkShop 6 update 2 C++ 5.3 2001/05/15]에서 컴파일 한 코드를 컴파일하는 동안 컴파일 오류가 발생합니다.Sun Studio 12에서 템플릿 컴파일 오류가 발생했습니다.
이것은 컴파일 오류입니다.
"Sample.cc": Error: Could not find a match for LoopThrough(int[2]) needed in main(). 1 Error(s) detected. *** Error code 1.
코드 : 나는 일반 버전의 코드를 주석 처리를 제거하면이
#include <iostream>
#define PRINT_TRACE(STR) \
std::cout << __FILE__ << ":" << __LINE__ << ":" << STR << "\n";
template<size_t SZ>
void LoopThrough(const int(&Item)[SZ])
{
PRINT_TRACE("Specialized version");
for (size_t index = 0; index < SZ; ++index)
{
std::cout << Item[index] << "\n";
}
}
/*
template<typename Type, size_t SZ>
void LoopThrough(const Type(&Item)[SZ])
{
PRINT_TRACE("Generic version");
}
*/
int main()
{
{
int arr[] = { 1, 2 };
LoopThrough(arr);
}
}
, 코드가 잘 컴파일 및 일반 버전이라고합니다. 익스텐션이 비활성화 된 MSVC 2010 및 ideone here과 같은 경우에는이 문제가 발생하지 않습니다. 특수 버전의 함수가 호출됩니다. 이제 질문은 Sun Compiler의 버그입니까?
예인 경우 어떻게하면 버그 보고서를 제출할 수 있습니까?
어쩌면 const를 제거합니까 :
가장 좋은 임시 수정은 아마 두 번째 오버로드인가? – PlasmaHH
예. const를 제거하거나 int arr []에 const를 추가하면 해결할 수 있습니다. 그러나 이것이 컴파일러의 버그인지 아니면 내 이해가 잘못된 것인지 알고 싶습니다. – Jagannath
clang, gcc, comau 및 msvc의 최신 버전이 동의하면 가능성이 있으며, SunCC의 버그입니다. SunCC는 버그가있는 것으로 유명합니다. 그래서 gcc를 사용하지 않는 이유는 무엇입니까? – PlasmaHH