This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
This patch adds an operator=(std::pair) to tr1::tuple, which is specified in TR1 but was previously missing. The most obvious problem this causes (and how I noticed it) is that you can't use tr1::tie with std::pairs without it. Also inlines a few functions which often optimise away to no code when inlined.
Attachment:
changelog-tuple
Description: application/text
diff -urNx '*CVS*' libstdc++-v3.cvs.clean/include/tr1/functional libstdc++-v3/include/tr1/functional
--- libstdc++-v3.cvs.clean/include/tr1/functional 2005-09-23 20:03:36.000000000 +0100
+++ libstdc++-v3/include/tr1/functional 2005-09-22 09:34:12.000000000 +0100
@@ -372,22 +372,24 @@
// Denotes a reference should be taken to a variable.
template<typename _Tp>
- reference_wrapper<_Tp>
+ inline reference_wrapper<_Tp>
ref(_Tp& __t)
{ return reference_wrapper<_Tp>(__t); }
// Denotes a const reference should be taken to a variable.
template<typename _Tp>
- reference_wrapper<const _Tp>
+ inline reference_wrapper<const _Tp>
cref(const _Tp& __t)
{ return reference_wrapper<const _Tp>(__t); }
template<typename _Tp>
- reference_wrapper<_Tp> ref(reference_wrapper<_Tp> __t)
+ inline reference_wrapper<_Tp>
+ ref(reference_wrapper<_Tp> __t)
{ return ref(__t.get()); }
template<typename _Tp>
- reference_wrapper<const _Tp> cref(reference_wrapper<_Tp> __t)
+ inline reference_wrapper<const _Tp>
+ cref(reference_wrapper<_Tp> __t)
{ return cref(__t.get()); }
template<typename _Tp, bool>
diff -urNx '*CVS*' libstdc++-v3.cvs.clean/include/tr1/tuple_iterate.h libstdc++-v3/include/tr1/tuple_iterate.h
--- libstdc++-v3.cvs.clean/include/tr1/tuple_iterate.h 2005-09-23 20:03:37.000000000 +0100
+++ libstdc++-v3/include/tr1/tuple_iterate.h 2005-09-22 09:35:37.000000000 +0100
@@ -53,11 +53,18 @@
{ }
#if _GLIBCXX_NUM_ARGS == 2
-template<class _U1, class _U2>
- tuple(const std::pair<_U1, _U2>& __u):
- _M_arg1(__u.first), _M_arg2(__u.second)
- { }
+ template<typename _U1, typename _U2>
+ tuple(const std::pair<_U1, _U2>& __u) :
+ _M_arg1(__u.first), _M_arg2(__u.second)
+ { }
+ template<typename _U1, typename _U2>
+ tuple&
+ operator=(const std::pair<_U1, _U2>& __u)
+ {
+ _M_arg1 = __u.first;
+ _M_arg2 = __u.second;
+ }
#endif
#if _GLIBCXX_NUM_ARGS > 0
@@ -137,14 +144,14 @@
inline make_tuple()
{ return tuple<>(); }
-inline tuple<>
-tie()
+tuple<>
+inline tie()
{ return tuple<>(); }
#else
template<_GLIBCXX_TEMPLATE_PARAMS>
typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::__type
- make_tuple(_GLIBCXX_PARAMS)
+ inline make_tuple(_GLIBCXX_PARAMS)
{
return typename __stripped_tuple_type<_GLIBCXX_TEMPLATE_ARGS>::
__type(_GLIBCXX_ARGS);
@@ -152,7 +159,7 @@
template<_GLIBCXX_TEMPLATE_PARAMS>
tuple<_GLIBCXX_REF_TEMPLATE_ARGS>
- tie(_GLIBCXX_REF_PARAMS)
+ inline tie(_GLIBCXX_REF_PARAMS)
{ return make_tuple(_GLIBCXX_REF_WRAP_PARAMS); }
#endif
diff -urNx '*CVS*' libstdc++-v3.cvs.clean/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc
--- libstdc++-v3.cvs.clean/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc 1970-01-01 01:00:00.000000000 +0100
+++ libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc 2005-09-22 09:21:12.000000000 +0100
@@ -0,0 +1,37 @@
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// Tuple
+
+#include <tr1/tuple>
+#include <tr1/utility>
+#include <testsuite_hooks.h>
+
+using namespace std;
+using namespace tr1;
+
+int
+main()
+{
+ pair<int, int> p(1, 2);
+ int x = 0;
+ int y = 0;
+ tie(x, y) = p;
+ VERIFY(x == 1 && y == 2);
+}
+
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |