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// <map>
11e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
12e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// template <class Key, class T, class Compare = less<Key>,
13e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant//           class Allocator = allocator<pair<const Key, T>>>
14e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant// class 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 <map>
2002bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier#include <utility>
2102bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier#include <cassert>
22e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
23e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnantstruct Key {
24e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant  template <typename T> Key(const T&) {}
25e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant  bool operator< (const Key&) const { return false; }
26e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant};
27e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant
2802bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselierint main()
29e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant{
3002bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    typedef std::map<Key, int> MapT;
3102bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    typedef MapT::iterator Iter;
3202bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    typedef std::pair<Iter, bool> IterBool;
3302bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    {
3402bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        MapT m_empty;
3502bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        MapT m_contains;
3602bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        m_contains[Key(0)] = 42;
3702bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier
3802bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        Iter it = m_empty.find(Key(0));
3902bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        assert(it == m_empty.end());
4002bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        it = m_contains.find(Key(0));
4102bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        assert(it != m_contains.end());
4202bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    }
4302bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    {
4402bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        MapT map;
4502bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        IterBool result = map.insert(std::make_pair(Key(0), 42));
4602bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        assert(result.second);
47d446308c9ccf84b6ac22ea0d5f62baf5c90a8489Marshall Clow        assert(result.first->second == 42);
4802bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        IterBool result2 = map.insert(std::make_pair(Key(0), 43));
4902bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        assert(!result2.second);
5002bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier        assert(map[Key(0)] == 42);
5102bb4bdb495ff5cc8bd6422e61b96433e60ba5e1Eric Fiselier    }
52e008d4eecc8a715139fc2bec0ff2921875e164e1Howard Hinnant}
53