の一員として
hash<Foo>
の専門化を書く必要があります。この特殊化は、Fooが宣言された後に定義する必要があります。しかし、私はすでにメンバー
unordered_set<Foo>
を定義する前に
hash<Foo>
ための特殊化を必要とするかのように私には思えます。少なくともそれはコンパイルされず、そこでは失敗します。私はハッシュテンプレートの前方宣言を試みましたが、それによってそれを動作させることはできませんでした。
関連するコードスニペットは:予め
class Foo {
public:
int i;
std::unordered_set<Foo> dummy;
Peer(std::unordered_set<Foo>);
};
namespace std {
template<> struct hash<Foo>
{
size_t operator()(const Foo& f) const
{
return hash<int>()(f.i);
}
};
}
おかげ
速い答えのためのおかげで、私はいくつかの理由違っ – devmapal
それを試してみましょう、クランは、この動作を許可します。 GCCは問題を正しく識別します。 – vmrob