1 | //===----------------------------------------------------------------------===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | // <map> |
10 | |
11 | // template <class Key, class T, class Compare = less<Key>, |
12 | // class Allocator = allocator<pair<const Key, T>>> |
13 | // class map |
14 | |
15 | // https://llvm.org/PR16538 |
16 | // https://llvm.org/PR16549 |
17 | |
18 | #include <map> |
19 | #include <utility> |
20 | #include <cassert> |
21 | |
22 | #include "test_macros.h" |
23 | |
24 | struct Key { |
25 | template <typename T> Key(const T&) {} |
26 | bool operator< (const Key&) const { return false; } |
27 | }; |
28 | |
29 | int main(int, char**) |
30 | { |
31 | typedef std::map<Key, int> MapT; |
32 | typedef MapT::iterator Iter; |
33 | typedef std::pair<Iter, bool> IterBool; |
34 | { |
35 | MapT m_empty; |
36 | MapT m_contains; |
37 | m_contains[Key(0)] = 42; |
38 | |
39 | Iter it = m_empty.find(x: Key(0)); |
40 | assert(it == m_empty.end()); |
41 | it = m_contains.find(x: Key(0)); |
42 | assert(it != m_contains.end()); |
43 | } |
44 | { |
45 | MapT map; |
46 | IterBool result = map.insert(std::make_pair(Key(0), 42)); |
47 | assert(result.second); |
48 | assert(result.first->second == 42); |
49 | IterBool result2 = map.insert(std::make_pair(Key(0), 43)); |
50 | assert(!result2.second); |
51 | assert(map[Key(0)] == 42); |
52 | } |
53 | |
54 | return 0; |
55 | } |
56 | |