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