constexpr std::hash
В некоторых ситуациях было бы полезно уметь вычислять хэш на этапе компиляции. Например, для строковых литералов сигнатура могла бы выглядеть как-нибудь вот так.
template<size_t _Size>
struct hash<char const (&)[_Size]>
{
constexpr hash() = default;
using _S = char const [_Size];
constexpr std::size_t operator()(_S &str) const noexcept
{
return constexpr_implementation(str, _Size); // релизация компилятором того или иного алгоритма
}
};
Преемущества - возможность использования результата везде, где можно использовать constexpt. Например, в switch конструкции.
> Hash functions are only required to produce the same result for the same input within a single execution of a program
Мне кажется из-за этого std::hash нельзя сделать constexpr, т.е. скорее всего придётся вводить новый std::hash, например, через tag dispatching.