BsEnumClassHash.h 927 B

12345678910111213141516171819202122232425
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. namespace BansheeEngine
  5. {
  6. /**
  7. * Hash for enum types, to be used instead of std::hash<T> when T is an enum.
  8. *
  9. * Until C++14, std::hash<T> is not defined if T is a enum (see
  10. * http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148). But
  11. * even with C++14, as of october 2016, std::hash for enums is not widely
  12. * implemented by compilers, so here when T is a enum, we use EnumClassHash
  13. * instead of std::hash. (For instance, in BansheeEngine::hash_combine(), or
  14. * BansheeEngine::UnorderedMap.)
  15. */
  16. struct EnumClassHash
  17. {
  18. template <typename T>
  19. std::size_t operator()(T t) const
  20. {
  21. return static_cast<std::size_t>(t);
  22. }
  23. };
  24. }