56 lines · cpp
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-exception6//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 map14 15// https://llvm.org/PR1653816// https://llvm.org/PR1654917 18#include <map>19#include <utility>20#include <cassert>21 22#include "test_macros.h"23 24struct Key {25 template <typename T>26 Key(const T&) {}27 bool operator<(const Key&) const { return false; }28};29 30int main(int, char**) {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(Key(0));40 assert(it == m_empty.end());41 it = m_contains.find(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