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 4677bf00f19584..eafbc46605e549 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,20 +25,38 @@ 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)]; P* ptr = reinterpret_cast(buffer); A a; + constructed = 0; + a.construct(ptr); + assert(constructed == 2); + assert(ptr->first.x == 42); + 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; + constructed = 0; a.construct(ptr); assert(constructed == 2); assert(ptr->first.x == 42);