GCC から次のエラー コードを簡単に検索したところ、この問題の解決を求める質問が多数ヒットしましたが、具体的な情報は何も見つかりませんでした。
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>
{
};
}