diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-10 19:20:51 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-07-10 19:20:51 +0000 |
commit | d7f61ae2e8f8c6f740585be6e16067343be1ae87 (patch) | |
tree | f4e614a9174ed22bd1027cb39b83a85600334af5 /libstdc++-v3 | |
parent | 95bc673f9c4f80dccfb73fd0245d87ea3f9f30d2 (diff) | |
download | gcc-d7f61ae2e8f8c6f740585be6e16067343be1ae87.tar.gz |
2007-07-10 Paolo Carlini <pcarlini@suse.de>
* include/std/utility (identity, move, forward): Add.
* testsuite/20_util/move/requirements/explicit_instantiation.cc: New.
* testsuite/20_util/move/1.cc: New.
* testsuite/20_util/identity/value.cc: New.
* testsuite/20_util/identity/requirements/typedefs.cc: New.
* testsuite/20_util/identity/requirements/explicit_instantiation.cc:
New.
* testsuite/20_util/forward/requirements/explicit_instantiation.cc:
New.
* testsuite/20_util/forward/1.cc: New.
* testsuite/20_util/forward/1_neg.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126522 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
9 files changed, 354 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8065618a01c..b7e3a433ecc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2007-07-10 Paolo Carlini <pcarlini@suse.de> + + * include/std/utility (identity, move, forward): Add. + * testsuite/20_util/move/requirements/explicit_instantiation.cc: New. + * testsuite/20_util/move/1.cc: New. + * testsuite/20_util/identity/value.cc: New. + * testsuite/20_util/identity/requirements/typedefs.cc: New. + * testsuite/20_util/identity/requirements/explicit_instantiation.cc: + New. + * testsuite/20_util/forward/requirements/explicit_instantiation.cc: + New. + * testsuite/20_util/forward/1.cc: New. + * testsuite/20_util/forward/1_neg.cc: New. + 2007-07-09 Paolo Carlini <pcarlini@suse.de> * testsuite/27_io/ios_base/failure/what-1.cc: Include <stdexcept>. diff --git a/libstdc++-v3/testsuite/20_util/forward/1.cc b/libstdc++-v3/testsuite/20_util/forward/1.cc new file mode 100644 index 00000000000..1d2b501b5a2 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/forward/1.cc @@ -0,0 +1,44 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2007 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. + +#include <memory> +#include <utility> + +template<class T, class A1, class A2> + std::shared_ptr<T> + factory(A1&& a1, A2&& a2) + { + return std::shared_ptr<T>(new T(std::forward<A1>(a1), + std::forward<A2>(a2))); + } + +struct A +{ + A(int&, const double&); +}; + +void g() +{ + int i = 2; + std::shared_ptr<A> sp1 = factory<A>(i, 1.414); +} diff --git a/libstdc++-v3/testsuite/20_util/forward/1_neg.cc b/libstdc++-v3/testsuite/20_util/forward/1_neg.cc new file mode 100644 index 00000000000..67598e2315a --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/forward/1_neg.cc @@ -0,0 +1,45 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2007 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. + +#include <memory> +#include <utility> + +template<class T, class A1, class A2> + std::shared_ptr<T> + factory(A1&& a1, A2&& a2) + { + return std::shared_ptr<T>(new T(std::forward<A1>(a1), + std::forward<A2>(a2))); // { dg-error "no matching function" } + } + +struct A +{ + A(int&, const double&); +}; + +void g() +{ + std::shared_ptr<A> sp1 = factory<A>(2, 1.414); // { dg-error "instantiated from here" } +} + +// { dg-excess-errors "" } diff --git a/libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc new file mode 100644 index 00000000000..ea86327c449 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc @@ -0,0 +1,41 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// NB: This file is for testing utility with NO OTHER INCLUDES. + +#include <utility> + +namespace std +{ + typedef short test_type; + template test_type&& forward(std::identity<test_type>::type&&); +} diff --git a/libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc new file mode 100644 index 00000000000..5da92d9105b --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc @@ -0,0 +1,41 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// NB: This file is for testing utility with NO OTHER INCLUDES. + +#include <utility> + +namespace std +{ + typedef short test_type; + template struct decay<test_type>; +} diff --git a/libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc new file mode 100644 index 00000000000..5642167b3b6 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc @@ -0,0 +1,34 @@ +// { dg-options "-std=gnu++0x" } +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2007 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. + +// +// NB: This file is for testing utility with NO OTHER INCLUDES. + +#include <utility> + +// { dg-do compile } + +void test01() +{ + // Check for required typedefs + typedef std::identity<int> test_type; + typedef test_type::type type; +} diff --git a/libstdc++-v3/testsuite/20_util/identity/value.cc b/libstdc++-v3/testsuite/20_util/identity/value.cc new file mode 100644 index 00000000000..54a49a51571 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/identity/value.cc @@ -0,0 +1,48 @@ +// { dg-options "-std=gnu++0x" } +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2007 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. + +#include <utility> +#include <testsuite_hooks.h> +#include <testsuite_tr1.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + using std::identity; + using std::is_same; + using namespace __gnu_test; + + VERIFY( (is_same<identity<int>::type, int>::value) ); + VERIFY( (is_same<identity<int&>::type, int&>::value) ); + VERIFY( (is_same<identity<int&&>::type, int&&>::value) ); + VERIFY( (is_same<identity<int*>::type, int*>::value) ); + VERIFY( (is_same<identity<ClassType&&>::type, ClassType&&>::value) ); + VERIFY( (is_same<identity<ClassType>::type, ClassType>::value) ); + VERIFY( (is_same<identity<int(int)>::type, int(int)>::value) ); + VERIFY( (is_same<identity<void>::type, void>::value) ); + VERIFY( (is_same<identity<const void>::type, const void>::value) ); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/20_util/move/1.cc b/libstdc++-v3/testsuite/20_util/move/1.cc new file mode 100644 index 00000000000..7ff7fbefbbc --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/move/1.cc @@ -0,0 +1,46 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> +// +// Copyright (C) 2007 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. + +#include <memory> +#include <utility> + +template<class T, class A1> + std::shared_ptr<T> + factory(A1&& a1) + { + return std::shared_ptr<T>(new T(std::forward<A1>(a1))); + } + +struct A +{ + A(); + A(const A&); + A(A&&); +}; + +void g() +{ + A a; + std::shared_ptr<A> sp1 = factory<A>(a); + std::shared_ptr<A> sp2 = factory<A>(std::move(a)); +} diff --git a/libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc new file mode 100644 index 00000000000..a5d58ffde5a --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc @@ -0,0 +1,41 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// 2007-07-10 Paolo Carlini <pcarlini@suse.de> + +// Copyright (C) 2007 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// NB: This file is for testing utility with NO OTHER INCLUDES. + +#include <utility> + +namespace std +{ + typedef short test_type; + template std::remove_reference<test_type>::type&& move(test_type&&); +} |