89 U& second { p.second };
90 U& right { p.second };
94 template <
typename... Args>
95 requires (
sizeof...(Args) > 0 && std::is_constructible_v<std::pair<T, U>, Args...>)
96 explicit pair(Args&&... args)
97 : p { std::forward<Args>(args)... }
101 : p { other.p }, first { p.first }, left { p.first }, second { p.second }, right { p.second }
104 pair(
pair&& other)
noexcept(std::is_nothrow_move_constructible_v<std::pair<T, U>>)
105 : p { std::move(other.p) }, first { p.first }, left { p.first }, second { p.second }, right { p.second }
108 pair& operator=(
const pair& other) {
113 pair& operator=(
pair&& other)
noexcept(std::is_nothrow_move_assignable_v<std::pair<T, U>>) {
114 p = std::move(other.p);
118 operator std::pair<T, U>& () {
return p; }
119 operator const std::pair<T, U>& ()
const {
return p; }