unordered_map :: find с ключом std :: пара указателей с пользовательскими хэш-ошибками в VS2012

Мне нужен былstd::unordered_map с ключомstd::pair<T*, T*> поэтому я «украл» следующий код:

template <class T>
inline void hash_combine(std::size_t & seed, const T & v)
{
  std::hash<T> hasher;
  seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}

namespace std
{
  template<typename S, typename T> struct hash<pair<S, T>>
  {
    inline size_t operator()(const pair<S, T> & v) const
    {
      size_t seed = 0;
      ::hash_combine(seed, v.first);
      ::hash_combine(seed, v.second);
      return seed;
    }
  };
}

из этого стекаответ.

Это работает как шарм на машинах Linux с GCC 4.9.2. Однако в Windows Visual Studio 2012 происходит сбой при вызове функции-членаfind() из моегоunordered_map, Мой друг отладил сбой на машине с Windows, и он сообщил, что он ломается только в режиме отладочной компиляции, давая «векторный индекс вне диапазона».

Q:Является ли опубликованный код действительным для хешированияstd::pair<T*, T*>?Есть ли более надежный / лучший способ хешированияstd::pair<T*, T*>?Что вызывает это странное поведение?

P.S: глубоко сожалею, что не опубликовалmcve но это невозможно сделать.

Ответы на вопрос(1)

Ваш ответ на вопрос