emplace_hint.pass.cpp revision b66e1c3f961179f8f5466061a54d6530d1749550
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <unordered_map> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class Alloc = allocator<pair<const Key, T>>> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class unordered_map 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class... Args> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// iterator emplace_hint(const_iterator p, Args&&... args); 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <unordered_map> 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <cassert> 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../../../Emplaceable.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../../../min_allocator.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int main() 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles){ 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::unordered_map<int, Emplaceable> C; 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef C::iterator R; 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) C c; 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) C::const_iterator e = c.end(); 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) R r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(3), 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::forward_as_tuple()); 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) assert(c.size() == 1); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch assert(r->first == 3); 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) assert(r->second == Emplaceable()); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) r = c.emplace_hint(e, std::pair<const int, Emplaceable>(4, Emplaceable(5, 6))); 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) assert(c.size() == 2); 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) assert(r->first == 4); 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) assert(r->second == Emplaceable(5, 6)); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5), 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::forward_as_tuple(6, 7)); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(c.size() == 3); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->first == 5); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->second == Emplaceable(6, 7)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if __cplusplus >= 201103L 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef std::unordered_map<int, Emplaceable, std::hash<int>, std::equal_to<int>, 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) min_allocator<std::pair<const int, Emplaceable>>> C; 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef C::iterator R; 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) C c; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) C::const_iterator e = c.end(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) R r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(3), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::forward_as_tuple()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(c.size() == 1); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->first == 3); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->second == Emplaceable()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = c.emplace_hint(e, std::pair<const int, Emplaceable>(4, Emplaceable(5, 6))); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(c.size() == 2); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->first == 4); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->second == Emplaceable(5, 6)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::forward_as_tuple(6, 7)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(c.size() == 3); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->first == 5); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assert(r->second == Emplaceable(6, 7)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)