С регулярным типом я имею в виду определение Степанова в Элементах программирования, в основном, что существует понятие равенства и объекты, которые являются копиями друг друга, сравниваются равными.
Итак, когда у вас есть обычный тип T, и отношение равенства является транзитивным (a == b && b == c = > a == c), вы можете определить (нетривиальный) хэш-функции, которая согласуется с определением равенства (a == b = > h (a) == h (b)). Всегда.
Но стандарт не включает в себя многие std::hash специализации. Например. std::complex не имеет одного и не имеет контейнеров с заметными исключениями vector<bool> и bitset.
Так что мне интересно, какой принцип дизайна здесь.
Или, спросил по-другому: есть ли причины не предоставлять std::hash специализации для ваших собственных типов, если они регулярны, а равенство транзитивно?