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