Sto scrivendo una classe che ha un unordered_set del proprio tipo come membro. Quindi ho bisogno di scrivere una specializzazione per hash<Foo>
. Questa specializzazione deve essere definita dopo che Foo è stato dichiarato. Ma mi sembra che ho già bisogno della specializzazione per hash<Foo>
prima di definire il membro unordered_set<Foo>
. Almeno non si compila e fallisce lì. Ho provato una dichiarazione in avanti del modello di hash ma non riuscivo a farlo funzionare neanche.std :: unordered_set <Foo> come membro della classe Foo
Il frammento di codice relativo è:
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);
}
};
}
Grazie in anticipo
Grazie per la risposta veloce, quindi proverò in modo diverso – devmapal
Per qualche motivo, Clang consentirà questo comportamento. GCC identifica correttamente un problema. – vmrob