This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
std::pair<reference,reference>
- From: Theodore Papadopoulo <Theodore dot Papadopoulo at sophia dot inria dot fr>
- To: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Tue, 16 May 2006 19:47:07 +0200
- Subject: std::pair<reference,reference>
- Reply-to: Theodore dot Papadopoulo at sophia dot inria dot fr
I wonder whether it would be possible to add some specializations of
pair for it to work even one of its template arguments is a reference.
Below is the specialization example for the case when the two
parameters are references. Obviously, DR 106 (if/when
adopted/implemented) is a better fix, but in the meantime, maybe a awful
trick like this one could be considered as a quality of
implementation....
If acceptable, I would be glad to implement and test it.
template<class _T1, class _T2>
struct pair<_T1&, _T2&>
{
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; ///< @c first is a copy of the first
object
_T2& second; ///< @c second is a copy of the second
object
// _GLIBCXX_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() { }
/** 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) { }
};