//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // class scoped_allocator_adaptor // scoped_allocator_adaptor select_on_container_copy_construction() const; #include #include #include "allocators.h" int main() { #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { typedef std::scoped_allocator_adaptor> A; A a1(A1(3)); assert(a1.outer_allocator().id() == 3); A a2 = std::allocator_traits::select_on_container_copy_construction(a1); assert(a2.outer_allocator().id() == 3); } { typedef std::scoped_allocator_adaptor> A; A a1(A3(3)); assert(a1.outer_allocator().id() == 3); A a2 = std::allocator_traits::select_on_container_copy_construction(a1); assert(a2.outer_allocator().id() == -1); } { typedef std::scoped_allocator_adaptor, A2, A3> A; A a1(A1(1), A2(2), A3(3)); assert(a1.outer_allocator().id() == 1); assert(a1.inner_allocator().outer_allocator().id() == 2); assert(a1.inner_allocator().inner_allocator().outer_allocator().id() == 3); A a2 = std::allocator_traits::select_on_container_copy_construction(a1); assert(a2.outer_allocator().id() == 1); assert(a2.inner_allocator().outer_allocator().id() == 2); assert(a2.inner_allocator().inner_allocator().outer_allocator().id() == -1); } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES }