OSDN Git Service

2010-11-03 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Nov 2010 05:53:05 +0000 (05:53 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Nov 2010 05:53:05 +0000 (05:53 +0000)
* include/std/tuple (tuple): Make default constructors constexpr.
* testsuite/20_util/tuple/cons/constexpr.cc: Add.

* testsuite/18_support/initializer_list/requirements/
constexpr_functions.cc: Add.
* testsuite/18_support/initializer_list/constexpr.cc: Add.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@166301 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/tuple
libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc [new file with mode: 0644]
libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc [new file with mode: 0644]
libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc [new file with mode: 0644]

index cc03f49..acc4f58 100644 (file)
@@ -1,3 +1,12 @@
+2010-11-03  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * include/std/tuple (tuple): Make default constructors constexpr.
+       * testsuite/20_util/tuple/cons/constexpr.cc: Add.
+
+       * testsuite/18_support/initializer_list/requirements/
+       constexpr_functions.cc: Add.
+       * testsuite/18_support/initializer_list/constexpr.cc: Add.
+
 2010-11-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * include/std/limits (__glibcxx_digits10, __glibcxx_max_digits10):
 2010-11-03  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * include/std/limits (__glibcxx_digits10, __glibcxx_max_digits10):
index 302d0f5..6827121 100644 (file)
@@ -64,7 +64,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     struct _Head_base<_Idx, _Head, true>
     : public _Head
     {
     struct _Head_base<_Idx, _Head, true>
     : public _Head
     {
-      _Head_base()
+      constexpr _Head_base()
       : _Head() { }
 
       _Head_base(const _Head& __h)
       : _Head() { }
 
       _Head_base(const _Head& __h)
@@ -83,7 +83,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template<std::size_t _Idx, typename _Head>
     struct _Head_base<_Idx, _Head, false>
     {
   template<std::size_t _Idx, typename _Head>
     struct _Head_base<_Idx, _Head, false>
     {
-      _Head_base()
+      constexpr _Head_base()
       : _M_head_impl() { }
 
       _Head_base(const _Head& __h)
       : _M_head_impl() { }
 
       _Head_base(const _Head& __h)
@@ -147,7 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       _Inherited&       _M_tail()       { return *this; }
       const _Inherited& _M_tail() const { return *this; }
 
       _Inherited&       _M_tail()       { return *this; }
       const _Inherited& _M_tail() const { return *this; }
 
-      _Tuple_impl()
+      constexpr _Tuple_impl()
       : _Inherited(), _Base() { }
 
       explicit 
       : _Inherited(), _Base() { }
 
       explicit 
@@ -225,7 +225,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       typedef _Tuple_impl<0, _Elements...> _Inherited;
 
     public:
       typedef _Tuple_impl<0, _Elements...> _Inherited;
 
     public:
-      _GLIBCXX_CONSTEXPR tuple()
+      constexpr tuple()
       : _Inherited() { }
 
       explicit
       : _Inherited() { }
 
       explicit
@@ -310,7 +310,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       typedef _Tuple_impl<0, _T1, _T2> _Inherited;
 
     public:
       typedef _Tuple_impl<0, _T1, _T2> _Inherited;
 
     public:
-      tuple()
+      constexpr tuple()
       : _Inherited() { }
 
       explicit
       : _Inherited() { }
 
       explicit
@@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       typedef _Tuple_impl<0, _T1> _Inherited;
 
     public:
       typedef _Tuple_impl<0, _T1> _Inherited;
 
     public:
-      tuple()
+      constexpr tuple()
       : _Inherited() { }
 
       explicit
       : _Inherited() { }
 
       explicit
diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc b/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc
new file mode 100644 (file)
index 0000000..76e6f4d
--- /dev/null
@@ -0,0 +1,30 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 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/>.
+
+#include <initializer_list>
+#include <testsuite_common_types.h>
+
+int main()
+{
+  __gnu_test::constexpr_default_constructible test1;
+  test1.operator()<std::initializer_list<long>>();
+
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc
new file mode 100644 (file)
index 0000000..0cfd46e
--- /dev/null
@@ -0,0 +1,57 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 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/>.
+
+#include <initializer_list>
+#include <testsuite_common_types.h>
+
+namespace __gnu_test
+{
+  struct constexpr_member_functions
+  {
+    template<typename _Ttesttype>
+      void
+      operator()()
+      {
+       struct _Concept
+       {
+         void __constraint()
+         { 
+           constexpr _Ttesttype obj;
+           constexpr auto v4 __attribute__((unused))
+             = obj.size();
+           constexpr auto v5 __attribute__((unused))
+             = obj.begin();
+           constexpr auto v6 __attribute__((unused))
+             = obj.end();
+         }
+       };
+
+       _Concept c;
+       c.__constraint();
+      }
+  };
+}
+
+int main()
+{
+  __gnu_test::constexpr_member_functions test;
+  test.operator()<std::initializer_list<int>>();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc
new file mode 100644 (file)
index 0000000..a4666e5
--- /dev/null
@@ -0,0 +1,29 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// 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/>.
+
+#include <memory>
+#include <testsuite_common_types.h>
+
+int main()
+{
+  __gnu_test::constexpr_default_constructible test;
+  test.operator()<std::tuple<int, int>>();
+  return 0;
+}