std::pair<reference,reference>
Howard Hinnant
hhinnant@apple.com
Thu May 18 17:18:00 GMT 2006
On May 18, 2006, at 12:38 PM, Benjamin Kosnik wrote:
>
>> No I mean this:
>>
>> #include <utility>
>>
>> int main()
>> {
>> using namespace std;
>>
>> int i = 6;
>> int j = 7;
>> int& r1 = i;
>> int& r2 = j;
>> pair<int&, int&> p = make_pair(r1, r2);
>> }
>
> Sure, your initial suggestion seems like a winner.
You might take a look at how tuple is done (which already has this
functionality).
> pair(const _T1& __a, const _T2& __b)
> : first(__a), second(__b) { }
>
Besides the reference-to-reference problem this will allow you to
bind a non-const reference to a temporary (which is bad).
In a nutshell, if you've got a reference type, you need to accept it
by value in an argument list:
template <class T>
struct param
{
typedef const T& type;
};
template <class T>
struct param<T&>
{
typedef T& type;
};
template <class T1, class T2>
struct pair
{
pair(typename param<T1>::type a, ...);
};
pair<int&, int&> p(1, 2); // compile time error (which is good)
int i;
pair<int&, int&> p(i, i); // ok
Also:
> typedef _T1 first_type; ///< @c first_type is the first
> bound
should be:
typedef _T1& first_type;
You don't want to tell people you've got an int when you really have
an int&.
-Howard
More information about the Libstdc++
mailing list