17686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant//===----------------------------------------------------------------------===// 27686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// 37686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// The LLVM Compiler Infrastructure 47686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// 57686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 67686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 77686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// 87686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant//===----------------------------------------------------------------------===// 97686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 107686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// <map> 117686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 127686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// map(map&&) 137686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// noexcept(is_nothrow_move_constructible<allocator_type>::value && 147686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// is_nothrow_move_constructible<key_compare>::value); 157686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 167686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant// This tests a conforming extension 177686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 18d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier// UNSUPPORTED: c++98, c++03 19d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier 207686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant#include <map> 217686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant#include <cassert> 227686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 23a29e0e5ba2ad9a130fc712591da374e80cc7153eEric Fiselier#include "test_macros.h" 24df00d5e5ad672aa275a29c5a446072959134adddMarshall Clow#include "MoveOnly.h" 251b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 267686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 277686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnanttemplate <class T> 287686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnantstruct some_comp 297686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant{ 307686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant typedef T value_type; 317686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant some_comp(const some_comp&); 324241df3ef46df4bc3d6fc729a39dd6e7c13fc6eeMarshall Clow bool operator()(const T&, const T&) const { return false; } 337686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant}; 347686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant 357686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnantint main() 367686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant{ 375597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#if defined(_LIBCPP_VERSION) 38eefcf8206eaed1ef26d996f97377017664c38d91Marshall Clow typedef std::pair<const MoveOnly, MoveOnly> V; 397686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant { 407686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant typedef std::map<MoveOnly, MoveOnly> C; 415597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 427686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant } 437686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant { 44eefcf8206eaed1ef26d996f97377017664c38d91Marshall Clow typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, test_allocator<V>> C; 455597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 467686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant } 477686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant { 48eefcf8206eaed1ef26d996f97377017664c38d91Marshall Clow typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<V>> C; 495597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej static_assert(std::is_nothrow_move_constructible<C>::value, ""); 507686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant } 515597800045d2053774514354adf7fbd8bd36cc3dStephan T. Lavavej#endif // _LIBCPP_VERSION 527686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant { 537686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant typedef std::map<MoveOnly, MoveOnly, some_comp<MoveOnly>> C; 547686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant static_assert(!std::is_nothrow_move_constructible<C>::value, ""); 557686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant } 567686add61e0a6c8e5abe28fb943cf2d698cd1266Howard Hinnant} 57