[libc++] Clean up pair's constructors and assignment operators
This patch makes std::pair's constructors and assignment operators closer to conforming in C++23. The only missing bit I am aware of now is `reference_constructs_from_temporary_v` checks, which we don't have the tools for yet. This patch also refactors a long-standing non-standard extension where we'd provide constructors for tuple-like types in all standard modes. The criteria for being a tuple-like type are different from pair-like types as introduced recently in the standard, leading to a lot of complexity when trying to implement recent papers that touch the pair constructors. After this patch, the pre-C++23 extension is provided in a self-contained block so that we can easily deprecate and eventually remove the extension in future releases. Differential Revision: https://reviews.llvm.org/D143914
parent
4b80a8c7
Please register or sign in to comment