aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2010-11-04 05:53:05 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2010-11-04 05:53:05 +0000
commit0e6ac87ebaf95910b2a816aaddc80ed9f0d00fb4 (patch)
tree71958eff5a01ab8a0f3b6c5a100767f03b50b41f /libstdc++-v3
parent2c2af801bcaa74c7bbd94c8883f7ab7d0d105b5b (diff)
downloadgcc-0e6ac87ebaf95910b2a816aaddc80ed9f0d00fb4.zip
gcc-0e6ac87ebaf95910b2a816aaddc80ed9f0d00fb4.tar.gz
gcc-0e6ac87ebaf95910b2a816aaddc80ed9f0d00fb4.tar.bz2
tuple (tuple): Make default constructors constexpr.
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. From-SVN: r166301
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog9
-rw-r--r--libstdc++-v3/include/std/tuple12
-rw-r--r--libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc30
-rw-r--r--libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc57
-rw-r--r--libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc29
5 files changed, 131 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index cc03f49..acc4f58 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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):
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 302d0f5..6827121 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -64,7 +64,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
struct _Head_base<_Idx, _Head, true>
: public _Head
{
- _Head_base()
+ constexpr _Head_base()
: _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>
{
- _Head_base()
+ constexpr _Head_base()
: _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; }
- _Tuple_impl()
+ constexpr _Tuple_impl()
: _Inherited(), _Base() { }
explicit
@@ -225,7 +225,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef _Tuple_impl<0, _Elements...> _Inherited;
public:
- _GLIBCXX_CONSTEXPR tuple()
+ constexpr tuple()
: _Inherited() { }
explicit
@@ -310,7 +310,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef _Tuple_impl<0, _T1, _T2> _Inherited;
public:
- tuple()
+ constexpr tuple()
: _Inherited() { }
explicit
@@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
typedef _Tuple_impl<0, _T1> _Inherited;
public:
- tuple()
+ constexpr tuple()
: _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
index 0000000..76e6f4d
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/initializer_list/constexpr.cc
@@ -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
index 0000000..0cfd46e
--- /dev/null
+++ b/libstdc++-v3/testsuite/18_support/initializer_list/requirements/constexpr_functions.cc
@@ -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
index 0000000..a4666e5
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr.cc
@@ -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;
+}