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