Connecting Tech Pros Worldwide Forums | Help | Site Map

query on std::make_pair()

mark.van.dijk@perform-sol.com
Guest
 
Posts: n/a
#1: Jul 23 '05
Hi there, the C++ standard (section 20.2) defines std::make_pair() as:

template <class T1, class T2>
pair<T1, T2> make_pair(const T1& x, const T2& y);

On my system (.NET 2003) it is defined as:

template<class _Ty1, class _Ty2> inline
pair<_Ty1, _Ty2> __cdecl make_pair(_Ty1 _Val1, _Ty2 _Val2)
{
// return pair composed from arguments
return (pair<_Ty1, _Ty2>(_Val1, _Val2));
}

In particular, not that the arguments _Val1 and _Val2 are passed in by
value, and not by reference.

Is this a bug in the .NET library? or is this actually allowed by the
spec?


Pete Becker
Guest
 
Posts: n/a
#2: Jul 23 '05

re: query on std::make_pair()


mark.van.dijk@perform-sol.com wrote:[color=blue]
> Hi there, the C++ standard (section 20.2) defines std::make_pair() as:
>
> template <class T1, class T2>
> pair<T1, T2> make_pair(const T1& x, const T2& y);
>
> On my system (.NET 2003) it is defined as:
>
> template<class _Ty1, class _Ty2> inline
> pair<_Ty1, _Ty2> __cdecl make_pair(_Ty1 _Val1, _Ty2 _Val2)
> {
> // return pair composed from arguments
> return (pair<_Ty1, _Ty2>(_Val1, _Val2));
> }
>
> In particular, not that the arguments _Val1 and _Val2 are passed in by
> value, and not by reference.
>
> Is this a bug in the .NET library? or is this actually allowed by the
> spec?
>[/color]

That was changed in the 2003 revision of the standard. It now says
[color=blue]
> template < class T1 , class T2 >
> pair <T1 , T2 > make_pair (T1 x , T2 y );
> 7 Returns: pair<T1, T2>(x, y).[/color]

--

Pete Becker
Dinkumware, Ltd. (http://www.dinkumware.com)
mark.van.dijk@perform-sol.com
Guest
 
Posts: n/a
#3: Jul 23 '05

re: query on std::make_pair()


very interesting - what is the reason for this change?

Pete Becker
Guest
 
Posts: n/a
#4: Jul 23 '05

re: query on std::make_pair()


mark.van.dijk@perform-sol.com wrote:[color=blue]
> very interesting - what is the reason for this change?
>[/color]

make_pair("abc", 3);

used to be illegal, because the first argument creates a reference to an
array, which can't be copied. With the new version the type of the first
argument decays to pointer to const char.

--

Pete Becker
Dinkumware, Ltd. (http://www.dinkumware.com)
Closed Thread