3 * - By John Hodge (thePowersGang)
8 #ifndef _LIBCXX_UTILITY_
9 #define _LIBCXX_UTILITY_
11 #include "_libcxx_helpers.h"
12 #include "type_traits"
16 template <class T1, class T2>
20 typedef T1 first_type;
21 typedef T2 second_type;
29 template <class U, class V>
30 pair(const pair<U,V>& pr):
35 pair(const first_type& a, const second_type& b):
40 // operator = is implicit
43 template <class T1, class T2>
44 bool operator== (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs) {
45 return lhs.first == rhs.first && lhs.second == rhs.second;
47 template <class T1, class T2>
48 bool operator!= (const pair<T1,T2>& lhs, const pair<T1,T2>& rhs) {
54 T&& forward(typename remove_reference<T>::type& arg) noexcept {
55 return static_cast<decltype(arg)&&>(arg);
58 T&& forward(typename remove_reference<T>::type&& arg) noexcept {
59 return static_cast<decltype(arg)&&>(arg);