1ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 2ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 3ee226c05af9e0187098f43fb71465a581487af9bDan Austin// The LLVM Compiler Infrastructure 4ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 5ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open 6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details. 7ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 9ee226c05af9e0187098f43fb71465a581487af9bDan Austin 10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03 11ee226c05af9e0187098f43fb71465a581487af9bDan Austin 12ee226c05af9e0187098f43fb71465a581487af9bDan Austin// <experimental/memory_resource> 13ee226c05af9e0187098f43fb71465a581487af9bDan Austin 14ee226c05af9e0187098f43fb71465a581487af9bDan Austin// template <class T> class polymorphic_allocator 15ee226c05af9e0187098f43fb71465a581487af9bDan Austin 16ee226c05af9e0187098f43fb71465a581487af9bDan Austin// polymorphic_allocator<T>::polymorphic_allocator(polymorphic_allocator const &); 17ee226c05af9e0187098f43fb71465a581487af9bDan Austin 18ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <experimental/memory_resource> 19ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <type_traits> 20ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <cassert> 21ee226c05af9e0187098f43fb71465a581487af9bDan Austin 22ee226c05af9e0187098f43fb71465a581487af9bDan Austinnamespace ex = std::experimental::pmr; 23ee226c05af9e0187098f43fb71465a581487af9bDan Austin 24ee226c05af9e0187098f43fb71465a581487af9bDan Austinint main() 25ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 26ee226c05af9e0187098f43fb71465a581487af9bDan Austin typedef ex::polymorphic_allocator<void> A1; 27ee226c05af9e0187098f43fb71465a581487af9bDan Austin { 28ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( 29ee226c05af9e0187098f43fb71465a581487af9bDan Austin std::is_copy_constructible<A1>::value, "" 30ee226c05af9e0187098f43fb71465a581487af9bDan Austin ); 31ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( 32ee226c05af9e0187098f43fb71465a581487af9bDan Austin std::is_move_constructible<A1>::value, "" 33ee226c05af9e0187098f43fb71465a581487af9bDan Austin ); 34ee226c05af9e0187098f43fb71465a581487af9bDan Austin } 35ee226c05af9e0187098f43fb71465a581487af9bDan Austin // copy 36ee226c05af9e0187098f43fb71465a581487af9bDan Austin { 37ee226c05af9e0187098f43fb71465a581487af9bDan Austin A1 const a((ex::memory_resource*)42); 38ee226c05af9e0187098f43fb71465a581487af9bDan Austin A1 const a2(a); 39ee226c05af9e0187098f43fb71465a581487af9bDan Austin assert(a.resource() == a2.resource()); 40ee226c05af9e0187098f43fb71465a581487af9bDan Austin } 41ee226c05af9e0187098f43fb71465a581487af9bDan Austin // move 42ee226c05af9e0187098f43fb71465a581487af9bDan Austin { 43ee226c05af9e0187098f43fb71465a581487af9bDan Austin A1 a((ex::memory_resource*)42); 44ee226c05af9e0187098f43fb71465a581487af9bDan Austin A1 a2(std::move(a)); 45ee226c05af9e0187098f43fb71465a581487af9bDan Austin assert(a.resource() == a2.resource()); 46ee226c05af9e0187098f43fb71465a581487af9bDan Austin assert(a2.resource() == (ex::memory_resource*)42); 47ee226c05af9e0187098f43fb71465a581487af9bDan Austin } 48ee226c05af9e0187098f43fb71465a581487af9bDan Austin} 49