OSDN Git Service

2007-07-10 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jul 2007 19:20:51 +0000 (19:20 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jul 2007 19:20:51 +0000 (19:20 +0000)
* 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
libstdc++-v3/testsuite/20_util/forward/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/forward/1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/forward/requirements/explicit_instantiation.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/identity/requirements/explicit_instantiation.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/identity/requirements/typedefs.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/identity/value.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/move/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/move/requirements/explicit_instantiation.cc [new file with mode: 0644]

index 8065618..b7e3a43 100644 (file)
@@ -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 (file)
index 0000000..1d2b501
--- /dev/null
@@ -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 (file)
index 0000000..67598e2
--- /dev/null
@@ -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 (file)
index 0000000..ea86327
--- /dev/null
@@ -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 (file)
index 0000000..5da92d9
--- /dev/null
@@ -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 (file)
index 0000000..5642167
--- /dev/null
@@ -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 (file)
index 0000000..54a49a5
--- /dev/null
@@ -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 (file)
index 0000000..7ff7fbe
--- /dev/null
@@ -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 (file)
index 0000000..a5d58ff
--- /dev/null
@@ -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&&);
+}