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
This commit is contained in:
Benjamin Kosnik 2010-11-04 05:53:05 +00:00 committed by Benjamin Kosnik
parent 2c2af801bc
commit 0e6ac87eba
5 changed files with 131 additions and 6 deletions

View 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):

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}