1e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant//===----------------------------------------------------------------------===// 2e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// 3e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// The LLVM Compiler Infrastructure 4e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// 5e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// 8e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant//===----------------------------------------------------------------------===// 9e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 10e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// <unordered_map> 11e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 12e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 13e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// class Alloc = allocator<pair<const Key, T>>> 14e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// class unordered_map 15e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 16b7fd0be37076c8fe5a26a5850580426bcd4c0740Eric Fiselier// https://bugs.llvm.org/show_bug.cgi?id=16538 17b7fd0be37076c8fe5a26a5850580426bcd4c0740Eric Fiselier// https://bugs.llvm.org/show_bug.cgi?id=16549 18e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 19e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant#include <unordered_map> 20fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier#include <cassert> 21e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 22e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantstruct Key { 23e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant template <typename T> Key(const T&) {} 24e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant bool operator== (const Key&) const { return true; } 25e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant}; 26e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 27e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantnamespace std 28e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant{ 29e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant template <> 30e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant struct hash<Key> 31e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant { 32e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant size_t operator()(Key const &) const {return 0;} 33e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant }; 34e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant} 35e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant 36e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantint 37e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantmain() 38e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant{ 39fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier typedef std::unordered_map<Key, int> MapT; 40fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier typedef MapT::iterator Iter; 41fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier MapT map; 42fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier Iter it = map.find(Key(0)); 43fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier assert(it == map.end()); 44fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier std::pair<Iter, bool> result = map.insert(std::make_pair(Key(0), 42)); 45fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier assert(result.second); 46fd9bbf52cd684dad08e2559d42edc0b424a455ccEric Fiselier assert(result.first->second == 42); 47e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant} 48