From d7f61ae2e8f8c6f740585be6e16067343be1ae87 Mon Sep 17 00:00:00 2001 From: paolo Date: Tue, 10 Jul 2007 19:20:51 +0000 Subject: [PATCH] 2007-07-10 Paolo Carlini * 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 --- libstdc++-v3/ChangeLog | 14 +++++++ libstdc++-v3/testsuite/20_util/forward/1.cc | 44 ++++++++++++++++++++ libstdc++-v3/testsuite/20_util/forward/1_neg.cc | 45 ++++++++++++++++++++ .../forward/requirements/explicit_instantiation.cc | 41 ++++++++++++++++++ .../requirements/explicit_instantiation.cc | 41 ++++++++++++++++++ .../20_util/identity/requirements/typedefs.cc | 34 +++++++++++++++ libstdc++-v3/testsuite/20_util/identity/value.cc | 48 ++++++++++++++++++++++ libstdc++-v3/testsuite/20_util/move/1.cc | 46 +++++++++++++++++++++ .../move/requirements/explicit_instantiation.cc | 41 ++++++++++++++++++ 9 files changed, 354 insertions(+) create mode 100644 libstdc++-v3/testsuite/20_util/forward/1.cc create mode 100644 libstdc++-v3/testsuite/20_util/forward/1_neg.cc create mode 100644 libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc create mode 100644 libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc create mode 100644 libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc create mode 100644 libstdc++-v3/testsuite/20_util/identity/value.cc create mode 100644 libstdc++-v3/testsuite/20_util/move/1.cc create mode 100644 libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8065618..b7e3a43 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2007-07-10 Paolo Carlini + + * 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 * testsuite/27_io/ios_base/failure/what-1.cc: Include . 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 0000000..1d2b501 --- /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 +// +// 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 +#include + +template + std::shared_ptr + factory(A1&& a1, A2&& a2) + { + return std::shared_ptr(new T(std::forward(a1), + std::forward(a2))); + } + +struct A +{ + A(int&, const double&); +}; + +void g() +{ + int i = 2; + std::shared_ptr sp1 = factory(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 0000000..67598e2 --- /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 +// +// 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 +#include + +template + std::shared_ptr + factory(A1&& a1, A2&& a2) + { + return std::shared_ptr(new T(std::forward(a1), + std::forward(a2))); // { dg-error "no matching function" } + } + +struct A +{ + A(int&, const double&); +}; + +void g() +{ + std::shared_ptr sp1 = factory(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 0000000..ea86327 --- /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 + +// 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 + +namespace std +{ + typedef short test_type; + template test_type&& forward(std::identity::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 0000000..5da92d9 --- /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 + +// 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 + +namespace std +{ + typedef short test_type; + template struct decay; +} 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 0000000..5642167 --- /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 +// +// 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 + +// { dg-do compile } + +void test01() +{ + // Check for required typedefs + typedef std::identity 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 0000000..54a49a5 --- /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 +// +// 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 +#include +#include + +void test01() +{ + bool test __attribute__((unused)) = true; + using std::identity; + using std::is_same; + using namespace __gnu_test; + + VERIFY( (is_same::type, int>::value) ); + VERIFY( (is_same::type, int&>::value) ); + VERIFY( (is_same::type, int&&>::value) ); + VERIFY( (is_same::type, int*>::value) ); + VERIFY( (is_same::type, ClassType&&>::value) ); + VERIFY( (is_same::type, ClassType>::value) ); + VERIFY( (is_same::type, int(int)>::value) ); + VERIFY( (is_same::type, void>::value) ); + VERIFY( (is_same::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 0000000..7ff7fbe --- /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 +// +// 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 +#include + +template + std::shared_ptr + factory(A1&& a1) + { + return std::shared_ptr(new T(std::forward(a1))); + } + +struct A +{ + A(); + A(const A&); + A(A&&); +}; + +void g() +{ + A a; + std::shared_ptr sp1 = factory(a); + std::shared_ptr sp2 = factory(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 0000000..a5d58ff --- /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 + +// 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 + +namespace std +{ + typedef short test_type; + template std::remove_reference::type&& move(test_type&&); +} -- 2.7.4