Les clés de l'ensemble non ordonné sont en lecture seule, alors pourquoi dans ce cas je peux effacer l'élément :
std::unordered_set<std::string> s;
s.emplace("sth");
s.erase("sth");
et dans ce pas :
std::unordered_set<std::string const> s;
const std::string str("sth");
s.emplace(str);
s.erase(str);
Si l'ensemble lui-même était const, cela aurait un sens, mais avec des clés const, je ne comprends pas bien. Cette assertion échoue :
static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, "");
Pourquoi la personne qui a écrit cette assertion, vérifierait-elle que la clé n'est pas const ?
EDITAR:
En fait, le code ci-dessus compile bien pour std::set
. Pour std::unordered_set
la défaillance se situe directement au niveau de l'instanciation. Un exemple minimal à reproduire :
// define a customized hash ...
int main() { sizeof(std::unordered_set<int const>); }