Piszę klasę, która ma unordered_set z własnego typu jako członka. Dlatego muszę napisać specjalizację dla hash<Foo>
. Ta specjalizacja musi być zdefiniowana po zadeklarowaniu Foo. Ale wydaje mi się, że potrzebuję specjalizacji na hash<Foo>
przed zdefiniowaniem członka unordered_set<Foo>
. Przynajmniej nie kompiluje się i kończy się niepowodzeniem. Próbowałem zgłoszenia do przodu szablonu hasha, ale nie mogłem go również uruchomić.std :: unordered_set <Foo> jako członek klasy Foo
Odpowiedni fragment kodu jest:
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);
}
};
}
góry dzięki
Dzięki za szybką odpowiedź, wtedy spróbuję inaczej – devmapal
Z jakiegoś powodu Clang pozwoli na to zachowanie. GCC prawidłowo identyfikuje problem. – vmrob