From patchwork Fri Aug 6 14:47:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v3] Implement US 98 and US 99 Date: Fri, 06 Aug 2010 04:47:16 -0000 From: Paolo Carlini X-Patchwork-Id: 61123 Message-Id: <4C5C2074.3070904@oracle.com> To: Gcc Patch List Cc: libstdc++ Hi, committed to mainline. Paolo. ///////////// 2010-08-06 Paolo Carlini * include/std/tuple (pack_arguments): Rename to forward_as_tuple and simplify, per US 98 and US 99. * testsuite/20_util/tuple/creation_functions/pack_arguments.cc: Rename to... * testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc: ... this, adjust. * testsuite/20_util/pair/piecewise.cc: Adjust. Index: include/std/tuple =================================================================== --- include/std/tuple (revision 162942) +++ include/std/tuple (working copy) @@ -549,27 +549,10 @@ return __result_type(std::forward<_Elements>(__args)...); } - template::value> - struct __pa_add_rvalue_reference_helper - { typedef typename std::add_rvalue_reference<_Tp>::type __type; }; - - template - struct __pa_add_rvalue_reference_helper<_Tp, true> - { typedef _Tp& __type; }; - - template - struct __pa_add_rvalue_reference - : public __pa_add_rvalue_reference_helper<_Tp> - { }; - template - inline tuple::__type...> - pack_arguments(_Elements&&... __args) - { - typedef tuple::__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 struct __index_holder { }; Index: testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc =================================================================== --- testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc (revision 162940) +++ testsuite/20_util/tuple/creation_functions/forward_as_tuple.cc (working copy) @@ -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(std::forward_as_tuple(-1)) == -1 ); + VERIFY( (std::is_same>::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>::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>::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>::value) ); VERIFY( std::get<0>(t3)[0] == a2[0] ); Index: testsuite/20_util/tuple/creation_functions/pack_arguments.cc =================================================================== --- testsuite/20_util/tuple/creation_functions/pack_arguments.cc (revision 162940) +++ testsuite/20_util/tuple/creation_functions/pack_arguments.cc (working copy) @@ -1,72 +0,0 @@ -// { dg-options "-std=gnu++0x" } - -// 2010-04-30 Paolo Carlini -// -// 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 -// . - -// Tuple - -#include -#include -#include - -void -test01() -{ - bool test __attribute__((unused)) = true; - - std::pack_arguments(); - - VERIFY( std::get<0>(std::pack_arguments(-1)) == -1 ); - VERIFY( (std::is_same>::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>::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>::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>::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; -} Index: testsuite/20_util/pair/piecewise.cc =================================================================== --- testsuite/20_util/pair/piecewise.cc (revision 162940) +++ testsuite/20_util/pair/piecewise.cc (working copy) @@ -70,21 +70,21 @@ bool test __attribute__((unused)) = true; std::pair 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 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 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 );