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