From b66a6e4b104b245ed448e3dea944fa7e842a96b2 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Wed, 29 Mar 2023 17:01:18 -0400 Subject: [PATCH] [libc++] Add minor test for polymorphic_allocator.construct with mixed argument pair --- .../mem.poly.allocator.mem/construct_pair.pass.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp index 4677bf0..75bfe6f 100644 --- a/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp +++ b/libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp @@ -25,15 +25,16 @@ int constructed = 0; +template struct default_constructible { default_constructible() : x(42) { ++constructed; } int x = 0; }; int main(int, char**) { - // pair as T() + // pair { - typedef default_constructible T; + typedef default_constructible<0> T; typedef std::pair P; typedef std::pmr::polymorphic_allocator A; alignas(P) char buffer[sizeof(P)]; @@ -45,5 +46,20 @@ int main(int, char**) { assert(ptr->second.x == 42); } + // pair, default_constructible<1>> + { + typedef default_constructible<0> T; + typedef default_constructible<1> U; + typedef std::pair P; + typedef std::pmr::polymorphic_allocator A; + alignas(P) char buffer[sizeof(P)]; + P* ptr = reinterpret_cast(buffer); + A a; + a.construct(ptr); + assert(constructed == 2); + assert(ptr->first.x == 42); + assert(ptr->second.x == 42); + } + return 0; } -- 2.7.4