20 Pair(
const T1& t_1,
const T2& t_2) : first(t_1), second(t_2) {}
21 Pair(T1&& t_1, T2&& t_2) : first(std::move(t_1)), second(std::move(t_2)) {}
22 Pair(
const T1& t_1, T2&& t_2) : first(t_1), second(std::move(t_2)) {}
23 Pair(T1&& t_1,
const T2& t_2) : first(std::move(t_1)), second(t_2) {}
28 Pair& operator=(
const Pair&) =
default;
31 bool operator==(
const Pair& t_rhs)
const {
32 return std::equal_to<T1>()(first, t_rhs.first) && std::equal_to<T2>()(second, t_rhs.second);
38 CommutativePair(
const T& t_1,
const T& t_2) :
Pair<T, T>(CompareT()(t_1, t_2) ? t_1 : t_2, CompareT()(t_1, t_2) ? t_2 : t_1) {}
39 CommutativePair(T&& t_1, T&& t_2) :
Pair<T, T>(CompareT()(t_1, t_2) ? std::move(t_1) : std::move(t_2), CompareT()(t_1, t_2) ? std::move(t_2) : std::move(t_1)) {}
40 CommutativePair(
const T& t_1, T&& t_2) :
Pair<T, T>(CompareT()(t_1, t_2) ? t_1 : std::move(t_2), CompareT()(t_1, t_2) ? std::move(t_2) : t_1) {}
41 CommutativePair(T&& t_1,
const T& t_2) :
Pair<T, T>(CompareT()(t_1, t_2) ? std::move(t_1) : t_2, CompareT()(t_1, t_2) ? t_2 : std::move(t_1)) {}
50 return std::equal_to<T>()(this->first, t_rhs.first) && std::equal_to<T>()(this->second, t_rhs.second);