diff options
author | Beren Minor <beren.minor+git@gmail.com> | 2014-12-31 11:17:21 (GMT) |
---|---|---|
committer | Beren Minor <beren.minor+git@gmail.com> | 2014-12-31 11:17:21 (GMT) |
commit | d1e6a29fd30337e86c346208661c00233fd223f7 (patch) | |
tree | e3085f86cb3b2cc2cdaba97ab5ad9082da4b7a1b /src/hash_map.h | |
parent | 82e372d5fd09ef37ab1b2f1c1cc175df26648653 (diff) | |
download | Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.zip Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.tar.gz Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.tar.bz2 |
Fix compilation errors on Visual Studio 2015 (_MSC_VER 1900).
Diffstat (limited to 'src/hash_map.h')
-rw-r--r-- | src/hash_map.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/hash_map.h b/src/hash_map.h index 77e7586..9b98ca8 100644 --- a/src/hash_map.h +++ b/src/hash_map.h @@ -50,7 +50,22 @@ unsigned int MurmurHash2(const void* key, size_t len) { return h; } -#ifdef _MSC_VER +#if (__cplusplus >= 201103L) || (_MSC_VER >= 1900) +#include <unordered_map> + +namespace std { +template<> +struct hash<StringPiece> { + typedef StringPiece argument_type; + typedef std::size_t result_type; + + result_type operator()(argument_type const& s) const { + return MurmurHash2(s.str_, s.len_); + } +}; +} + +#elif defined(_MSC_VER) #include <hash_map> using stdext::hash_map; @@ -102,7 +117,9 @@ struct hash<StringPiece> { /// mapping StringPiece => Foo*. template<typename V> struct ExternalStringHashMap { -#ifdef _MSC_VER +#if (__cplusplus >= 201103L) || (_MSC_VER >= 1900) + typedef std::unordered_map<StringPiece, V> Type; +#elif defined(_MSC_VER) typedef hash_map<StringPiece, V, StringPieceCmp> Type; #else typedef hash_map<StringPiece, V> Type; |