diff options
Diffstat (limited to 'libstdc++-v3/include/bits/stl_pair.h')
| -rw-r--r-- | libstdc++-v3/include/bits/stl_pair.h | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 27bc50d39a6..b10f96545f4 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -53,8 +53,9 @@ * purpose. It is provided "as is" without express or implied warranty. */ -/* NOTE: This is an internal header file, included by other STL headers. - * You should not attempt to use it directly. +/** @file stl_pair.h + * This is an internal header file, included by other STL headers. You + * should not attempt to use it directly. */ #ifndef __SGI_STL_INTERNAL_PAIR_H @@ -63,31 +64,38 @@ namespace std { +/// pair holds two objects of arbitrary type. template <class _T1, class _T2> struct pair { - typedef _T1 first_type; - typedef _T2 second_type; + typedef _T1 first_type; ///< @c first_type is the first bound type + typedef _T2 second_type; ///< @c second_type is the second bound type - _T1 first; - _T2 second; + _T1 first; ///< @c first is a copy of the first object + _T2 second; ///< @c second is a copy of the second object #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS //265. std::pair::pair() effects overly restrictive + /** The default constructor creates @c first and @c second using their + * respective default constructors. */ pair() : first(), second() {} #else pair() : first(_T1()), second(_T2()) {} #endif + /** Two objects may be passed to a @c pair constructor to be copied. */ pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {} + /** There is also a templated copy ctor for the @c pair class itself. */ template <class _U1, class _U2> pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {} }; +/// Two pairs of the same type are equal iff their members are equal. template <class _T1, class _T2> inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { return __x.first == __y.first && __x.second == __y.second; } +/// ...put link to onlinedocs here... template <class _T1, class _T2> inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { @@ -95,26 +103,39 @@ inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) (!(__y.first < __x.first) && __x.second < __y.second); } +/// Uses @c operator== to find the result. template <class _T1, class _T2> inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { return !(__x == __y); } +/// Uses @c operator< to find the result. template <class _T1, class _T2> inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { return __y < __x; } +/// Uses @c operator< to find the result. template <class _T1, class _T2> inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { return !(__y < __x); } +/// Uses @c operator< to find the result. template <class _T1, class _T2> inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) { return !(__x < __y); } +/** + * @brief A convenience wrapper for creating a pair from two objects. + * @param x The first object. + * @param y The second object. + * @return A newly-constructed pair<> object of the appropriate type. + * + * The standard requires that the objects be passed by reference-to-const, + * but LWG issue #181 says they should be passed by const value. + */ template <class _T1, class _T2> #ifdef _GLIBCPP_RESOLVE_LIB_DEFECTS //181. make_pair() unintended behavior |

