summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-06 15:13:04 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-12-06 15:13:04 +0000
commite0ba5eff5d52a32e6c3132bd6555f833c53c7deb (patch)
tree44ef218cd901a8d4cee7ffbbed9e50f7894de307 /libstdc++-v3/include/std
parent9b0389b2dc067e22023d8aefa7e0a4d05a889cfe (diff)
downloadgcc-e0ba5eff5d52a32e6c3132bd6555f833c53c7deb.tar.gz
2011-12-06 Jonathan Wakely <jwakely.gcc@gmail.com>
Chris Jefferson <chris@bubblescope.net> PR libstdc++/51183 * include/std/stl_pair.h (pair<>::__cons, pair<>::__do_cons): Remove. (pair<>::pair(piecewise_construct_t, tuple<>, tuple<>): Only declare. (pair<>::pair(tuple<>&, tuple<>&, _Index_tuple<>, _Index_tuple<>)): Declare. * include/std/tuple (pair<>::__cons, pair<>::__do_cons): Remove. (pair<>::pair(tuple<>&, tuple<>&, _Index_tuple<>, _Index_tuple<>)): Define. (pair<>::pair(piecewise_construct_t, tuple<>, tuple<>): Define, delegating to the latter. * testsuite/20_util/pair/piecewise2.cc: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182054 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std')
-rw-r--r--libstdc++-v3/include/std/tuple31
1 files changed, 18 insertions, 13 deletions
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 282d4509d3a..e8aaf4610c3 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -1057,21 +1057,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// See stl_pair.h...
template<class _T1, class _T2>
- template<typename _Tp, typename... _Args>
- inline _Tp
- pair<_T1, _T2>::__cons(tuple<_Args...>&& __tuple)
- {
- typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
- _Indexes;
- return __do_cons<_Tp>(std::move(__tuple), _Indexes());
- }
+ template<typename... _Args1, typename... _Args2>
+ inline
+ pair<_T1, _T2>::
+ pair(piecewise_construct_t,
+ tuple<_Args1...> __first, tuple<_Args2...> __second)
+ : pair(__first, __second,
+ typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
+ typename _Build_index_tuple<sizeof...(_Args2)>::__type())
+ { }
template<class _T1, class _T2>
- template<typename _Tp, typename... _Args, std::size_t... _Indexes>
- inline _Tp
- pair<_T1, _T2>::__do_cons(tuple<_Args...>&& __tuple,
- const _Index_tuple<_Indexes...>&)
- { return _Tp(std::forward<_Args>(get<_Indexes>(__tuple))...); }
+ template<typename... _Args1, std::size_t... _Indexes1,
+ typename... _Args2, std::size_t... _Indexes2>
+ inline
+ pair<_T1, _T2>::
+ pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
+ _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
+ : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
+ second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
+ { }
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace