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 1053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// <string> 1153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// basic_string(basic_string&&) 1353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// noexcept(is_nothrow_move_constructible<allocator_type>::value); 1453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant// This tests a conforming extension 1653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 1753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#include <string> 1853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#include <cassert> 1953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 201b92188a82b01e76ac6e8ad5f997293c2a078adcMarshall Clow#include "test_allocator.h" 2153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 2253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnanttemplate <class T> 2353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnantstruct some_alloc 2453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant{ 2553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef T value_type; 2653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant some_alloc(const some_alloc&); 2753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant}; 2853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant 2953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnantint main() 3053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant{ 3153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#if __has_feature(cxx_noexcept) 3253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 3353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::string C; 3453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 3553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 3653f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 3753f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C; 3853f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(std::is_nothrow_move_constructible<C>::value, ""); 3953f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 4053f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant { 4153f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C; 4253f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant static_assert(!std::is_nothrow_move_constructible<C>::value, ""); 4353f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant } 4453f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant#endif 4553f7d4cc624477d8f503be22d89d83230960ea39Howard Hinnant} 46