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
16e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// http://llvm.org/bugs/show_bug.cgi?id=16538
179b128e06edf05507ae10f4892d2445d8376db235Howard Hinnant// http://llvm.org/bugs/show_bug.cgi?id=16549
18e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
19e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant#include <unordered_map>
20e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
21e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantstruct Key {
22e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant  template <typename T> Key(const T&) {}
23e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant  bool operator== (const Key&) const { return true; }
24e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant};
25e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
26e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantnamespace std
27e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant{
28e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant    template <>
29e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant    struct hash<Key>
30e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant    {
31e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant        size_t operator()(Key const &) const {return 0;}
32e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant    };
33e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant}
34e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
35e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantint
36e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantmain()
37e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant{
38e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant    std::unordered_map<Key, int>::iterator it =
39e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant        std::unordered_map<Key, int>().find(Key(0));
409b128e06edf05507ae10f4892d2445d8376db235Howard Hinnant    std::pair<std::unordered_map<Key, int>::iterator, bool> result =
419b128e06edf05507ae10f4892d2445d8376db235Howard Hinnant        std::unordered_map<Key, int>().insert(std::make_pair(Key(0), 0));
42e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant}
43