153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant//===----------------------------------------------------------------------===// 253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// 353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// The LLVM Compiler Infrastructure 453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// 553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// 853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant//===----------------------------------------------------------------------===// 953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03 11ee226c05af9e0187098f43fb71465a581487af9bDan Austin 1253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// <string> 1353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// basic_string(basic_string&&) 1553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// noexcept(is_nothrow_move_constructible<allocator_type>::value); 1653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// This tests a conforming extension 1853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#include <string> 2053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#include <cassert> 2153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 227b193f7797b71323efc385916f128c6dd17819b4Marshall Clow#include "test_macros.h" 231b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 2453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 2553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnanttemplate <class T> 2653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnantstruct some_alloc 2753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant{ 2853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef T value_type; 2953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant some_alloc(const some_alloc&); 3053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant}; 3153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 3253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnantint main() 3353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant{ 3453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 3553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::string C; 3653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 3753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 3853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 3953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C; 4053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 4153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 4253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 4353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C; 447b193f7797b71323efc385916f128c6dd17819b4Marshall Clow#if TEST_STD_VER <= 14 4553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(!std::is_nothrow_move_constructible<C>::value, ""); 467b193f7797b71323efc385916f128c6dd17819b4Marshall Clow#else 477b193f7797b71323efc385916f128c6dd17819b4Marshall Clow static_assert( std::is_nothrow_move_constructible<C>::value, ""); 487b193f7797b71323efc385916f128c6dd17819b4Marshall Clow#endif 4953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 5053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant} 51