GCC에서 다음과 같은 오류 코드에 대한 간단한 검색을 수행하는 데, 히트 수는 질문에이 문제에 대한 도움을 요청 보여 주지만, 아무것도 많은 콘크리트가집니다 :템플릿 전문화 C++ 98
error: explicit specialization of non-template 'std::hash'
std :: hash가 실제로 템플릿이기 때문에 문제가 무엇인지 명확하지 않습니다. 메시지를 생성하는 샘플 코드는 다음과 같습니다. GCC 옵션 -std = C++ 0x는 코드를 잘 컴파일합니다. 문제는 내가 하나의 컴퓨터에서 C++ 11을 지원하지 않는 구형 컴파일러를 가지고 있기 때문에 이것이 컴파일되지 않는 이유에 대한 약간의 설명이 유용 할 것입니다.
대안은 전문화 대신 상속을 사용하는 것일 수도 있으며, 이것이 유일한 해결책 인 경우 알고있는 것도 좋습니다.
#include <functional>
struct test
{
int n;
};
namespace std
{
template<>
struct hash<test>
{
};
}
무슨 "오래된 컴파일러"에 대해 이야기하고 있습니까? GCC의 이전 버전입니까? 아니면 완전히 다른 컴파일러인가? – AnT
당신의 질문은 기본적으로 "C++ 11을 사용할 때, C++ 11을 사용할 수 없을 때, 왜 작동하지 않습니까?" ... 대답은 분명해야합니다 –