Index: include/utility =================================================================== --- include/utility +++ include/utility @@ -303,6 +303,7 @@ #endif #if defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR) +template struct __non_trivially_copyable_base { _LIBCPP_CONSTEXPR _LIBCPP_INLINE_VISIBILITY __non_trivially_copyable_base() _NOEXCEPT {} @@ -314,7 +315,7 @@ template struct _LIBCPP_TEMPLATE_VIS pair #if defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR) -: private __non_trivially_copyable_base +: private __non_trivially_copyable_base<_T1, _T2> #endif { typedef _T1 first_type; Index: test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp =================================================================== --- test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp +++ test/libcxx/utilities/utility/pairs/pairs.pair/non_trivial_copy_move_ABI.pass.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "test_macros.h" @@ -86,7 +87,7 @@ #endif -int main() +void test_trivial() { { typedef std::pair P; @@ -150,3 +151,15 @@ } #endif } + +void test_layout() { + typedef std::pair, char> PairT; + static_assert(sizeof(PairT) == 3, ""); + static_assert(TEST_ALIGNOF(PairT) == TEST_ALIGNOF(char), ""); + static_assert(offsetof(PairT, first) == 0, ""); +} + +int main() { + test_trivial(); + test_layout(); +} Index: test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp =================================================================== --- test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp +++ test/libcxx/utilities/utility/pairs/pairs.pair/trivial_copy_move_ABI.pass.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "test_macros.h" @@ -81,7 +82,7 @@ #endif -int main() +void test_trivial() { { typedef std::pair P; @@ -145,3 +146,15 @@ } #endif } + +void test_layout() { + typedef std::pair, char> PairT; + static_assert(sizeof(PairT) == 3, ""); + static_assert(TEST_ALIGNOF(PairT) == TEST_ALIGNOF(char), ""); + static_assert(offsetof(PairT, first) == 0, ""); +} + +int main() { + test_trivial(); + test_layout(); +}