===================================================================
@@ -549,27 +549,10 @@
return __result_type(std::forward<_Elements>(__args)...);
}
- template<typename _Tp, bool = is_array<_Tp>::value>
- struct __pa_add_rvalue_reference_helper
- { typedef typename std::add_rvalue_reference<_Tp>::type __type; };
-
- template<typename _Tp>
- struct __pa_add_rvalue_reference_helper<_Tp, true>
- { typedef _Tp& __type; };
-
- template<typename _Tp>
- struct __pa_add_rvalue_reference
- : public __pa_add_rvalue_reference_helper<_Tp>
- { };
-
template<typename... _Elements>
- inline tuple<typename __pa_add_rvalue_reference<_Elements>::__type...>
- pack_arguments(_Elements&&... __args)
- {
- typedef tuple<typename __pa_add_rvalue_reference<_Elements>::__type...>
- __result_type;
- return __result_type(std::forward<_Elements>(__args)...);
- }
+ inline tuple<_Elements&&...>
+ forward_as_tuple(_Elements&&... __args)
+ { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
template<std::size_t...> struct __index_holder { };
===================================================================
@@ -30,16 +30,16 @@
{
bool test __attribute__((unused)) = true;
- std::pack_arguments();
+ std::forward_as_tuple();
- VERIFY( std::get<0>(std::pack_arguments(-1)) == -1 );
- VERIFY( (std::is_same<decltype(std::pack_arguments(-1)),
+ VERIFY( std::get<0>(std::forward_as_tuple(-1)) == -1 );
+ VERIFY( (std::is_same<decltype(std::forward_as_tuple(-1)),
std::tuple<int&&>>::value) );
const int i1 = 1;
const int i2 = 2;
const double d1 = 4.0;
- auto t1 = std::pack_arguments(i1, i2, d1);
+ auto t1 = std::forward_as_tuple(i1, i2, d1);
VERIFY( (std::is_same<decltype(t1), std::tuple<const int&,
const int&, const double&>>::value) );
VERIFY( std::get<0>(t1) == i1 );
@@ -48,7 +48,7 @@
typedef const int a_type1[3];
a_type1 a1 = { -1, 1, 2 };
- auto t2 = std::pack_arguments(a1);
+ auto t2 = std::forward_as_tuple(a1);
VERIFY( (std::is_same<decltype(t2), std::tuple<a_type1&>>::value) );
VERIFY( std::get<0>(t2)[0] == a1[0] );
VERIFY( std::get<0>(t2)[1] == a1[1] );
@@ -57,7 +57,7 @@
typedef int a_type2[2];
a_type2 a2 = { 2, -2 };
volatile int i4 = 1;
- auto t3 = std::pack_arguments(a2, i4);
+ auto t3 = std::forward_as_tuple(a2, i4);
VERIFY( (std::is_same<decltype(t3), std::tuple<a_type2&,
volatile int&>>::value) );
VERIFY( std::get<0>(t3)[0] == a2[0] );
===================================================================
@@ -1,72 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-
-// 2010-04-30 Paolo Carlini <paolo.carlini@oracle.com>
-//
-// Copyright (C) 2010 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 3, 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 COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// Tuple
-
-#include <tuple>
-#include <type_traits>
-#include <testsuite_hooks.h>
-
-void
-test01()
-{
- bool test __attribute__((unused)) = true;
-
- std::pack_arguments();
-
- VERIFY( std::get<0>(std::pack_arguments(-1)) == -1 );
- VERIFY( (std::is_same<decltype(std::pack_arguments(-1)),
- std::tuple<int&&>>::value) );
-
- const int i1 = 1;
- const int i2 = 2;
- const double d1 = 4.0;
- auto t1 = std::pack_arguments(i1, i2, d1);
- VERIFY( (std::is_same<decltype(t1), std::tuple<const int&,
- const int&, const double&>>::value) );
- VERIFY( std::get<0>(t1) == i1 );
- VERIFY( std::get<1>(t1) == i2 );
- VERIFY( std::get<2>(t1) == d1 );
-
- typedef const int a_type1[3];
- a_type1 a1 = { -1, 1, 2 };
- auto t2 = std::pack_arguments(a1);
- VERIFY( (std::is_same<decltype(t2), std::tuple<a_type1&>>::value) );
- VERIFY( std::get<0>(t2)[0] == a1[0] );
- VERIFY( std::get<0>(t2)[1] == a1[1] );
- VERIFY( std::get<0>(t2)[2] == a1[2] );
-
- typedef int a_type2[2];
- a_type2 a2 = { 2, -2 };
- volatile int i4 = 1;
- auto t3 = std::pack_arguments(a2, i4);
- VERIFY( (std::is_same<decltype(t3), std::tuple<a_type2&,
- volatile int&>>::value) );
- VERIFY( std::get<0>(t3)[0] == a2[0] );
- VERIFY( std::get<0>(t3)[1] == a2[1] );
- VERIFY( std::get<1>(t3) == i4 );
-}
-
-int main()
-{
- test01();
- return 0;
-}
===================================================================
@@ -70,21 +70,21 @@
bool test __attribute__((unused)) = true;
std::pair<type_one, type_zero> pp0(std::piecewise_construct_t(),
- std::pack_arguments(-3),
- std::pack_arguments());
+ std::forward_as_tuple(-3),
+ std::forward_as_tuple());
VERIFY( pp0.first.get() == -3 );
VERIFY( pp0.second.get() == 757 );
std::pair<type_one, type_two> pp1(std::piecewise_construct_t(),
- std::pack_arguments(6),
- std::pack_arguments(5, 4));
+ std::forward_as_tuple(6),
+ std::forward_as_tuple(5, 4));
VERIFY( pp1.first.get() == 6 );
VERIFY( pp1.second.get1() == 5 );
VERIFY( pp1.second.get2() == 4 );
std::pair<type_two, type_two> pp2(std::piecewise_construct_t(),
- std::pack_arguments(2, 1),
- std::pack_arguments(-1, -3));
+ std::forward_as_tuple(2, 1),
+ std::forward_as_tuple(-1, -3));
VERIFY( pp2.first.get1() == 2 );
VERIFY( pp2.first.get2() == 1 );
VERIFY( pp2.second.get1() == -1 );