diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2010-11-06 00:11:57 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2010-11-06 00:11:57 +0000 |
commit | be9d3d73425dc366fe8c1456a3503d6c118618a0 (patch) | |
tree | 68897208905b15c8ebef7fedfd4db48f0bbfa56e /libstdc++-v3 | |
parent | a75de6923043978eb7d96d79a28ba7becea353e9 (diff) | |
download | gcc-be9d3d73425dc366fe8c1456a3503d6c118618a0.zip gcc-be9d3d73425dc366fe8c1456a3503d6c118618a0.tar.gz gcc-be9d3d73425dc366fe8c1456a3503d6c118618a0.tar.bz2 |
shared_ptr.h (shared_ptr<>::__shared_ptr(), [...]): Add constexpr specifier.
2010-11-05 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/shared_ptr.h (shared_ptr<>::__shared_ptr(),
shared_ptr<>::shared_ptr(nullptr_t), weak_ptr<>::weak_ptr(),
enable_shared_from_this::enable_shared_from_this()): Add constexpr
specifier.
* include/bits/shared_ptr_base.h (__shared_count::__shared_count(),
__shared_count::__shared_count(), __shared_ptr<>::__shared_ptr(),
__shared_ptr<>::__shared_ptr(nullptr_t), __weak_ptr<>::__weak_ptr(),
__enable_shared_from_this::__enable_shared_from_this()): Likewise.
* include/bits/unique_ptr.h (default_delete,
unique_ptr<>::unique_ptr(), unique_ptr<>::unique_ptr(nullptr_t)):
Likewise.
* testsuite/20_util/default_delete/cons/constexpr.cc: Do not xfail.
* testsuite/20_util/shared_ptr/cons/constexpr.cc: Remove, the test
cannot work for a non-literal type like std::shared_ptr.
* testsuite/20_util/weak_ptr/cons/constexpr.cc: Likewise.
* testsuite/util/testsuite_common_types.h: Add comments.
* testsuite/20_util/unique_ptr/cons/constexpr.cc: Likewise.
* testsuite/20_util/shared_ptr/cons/43820.cc: Adjust dg-error line
numbers.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise.
From-SVN: r166386
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 23 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/shared_ptr.h | 14 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/shared_ptr_base.h | 18 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/unique_ptr.h | 36 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc | 33 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc | 32 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc | 6 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc | 32 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/util/testsuite_common_types.h | 2 |
11 files changed, 71 insertions, 133 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ad8b235..672d9f1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,26 @@ +2010-11-05 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/shared_ptr.h (shared_ptr<>::__shared_ptr(), + shared_ptr<>::shared_ptr(nullptr_t), weak_ptr<>::weak_ptr(), + enable_shared_from_this::enable_shared_from_this()): Add constexpr + specifier. + * include/bits/shared_ptr_base.h (__shared_count::__shared_count(), + __shared_count::__shared_count(), __shared_ptr<>::__shared_ptr(), + __shared_ptr<>::__shared_ptr(nullptr_t), __weak_ptr<>::__weak_ptr(), + __enable_shared_from_this::__enable_shared_from_this()): Likewise. + * include/bits/unique_ptr.h (default_delete, + unique_ptr<>::unique_ptr(), unique_ptr<>::unique_ptr(nullptr_t)): + Likewise. + * testsuite/20_util/default_delete/cons/constexpr.cc: Do not xfail. + * testsuite/20_util/shared_ptr/cons/constexpr.cc: Remove, the test + cannot work for a non-literal type like std::shared_ptr. + * testsuite/20_util/weak_ptr/cons/constexpr.cc: Likewise. + * testsuite/util/testsuite_common_types.h: Add comments. + * testsuite/20_util/unique_ptr/cons/constexpr.cc: Likewise. + * testsuite/20_util/shared_ptr/cons/43820.cc: Adjust dg-error line + numbers. + * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Likewise. + 2010-11-05 Benjamin Kosnik <bkoz@redhat.com> * doc/doxygen/user.cfg.in: Remove tr1_impl headers. diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h index 2d9e6f7..0e6f7a6 100644 --- a/libstdc++-v3/include/bits/shared_ptr.h +++ b/libstdc++-v3/include/bits/shared_ptr.h @@ -95,7 +95,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * @brief Construct an empty %shared_ptr. * @post use_count()==0 && get()==0 */ - shared_ptr() : __shared_ptr<_Tp>() { } + constexpr shared_ptr() + : __shared_ptr<_Tp>() { } /** * @brief Construct a %shared_ptr that owns the pointer @a __p. @@ -104,7 +105,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * @throw std::bad_alloc, in which case @c delete @a __p is called. */ template<typename _Tp1> - explicit shared_ptr(_Tp1* __p) : __shared_ptr<_Tp>(__p) { } + explicit shared_ptr(_Tp1* __p) + : __shared_ptr<_Tp>(__p) { } /** * @brief Construct a %shared_ptr that owns the pointer @a __p @@ -256,7 +258,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * @param __p A null pointer constant. * @post use_count() == 0 && get() == nullptr */ - shared_ptr(nullptr_t __p) : __shared_ptr<_Tp>(__p) { } + constexpr shared_ptr(nullptr_t __p) + : __shared_ptr<_Tp>(__p) { } template<typename _Tp1> shared_ptr& @@ -387,7 +390,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class weak_ptr : public __weak_ptr<_Tp> { public: - weak_ptr() : __weak_ptr<_Tp>() { } + constexpr weak_ptr() + : __weak_ptr<_Tp>() { } template<typename _Tp1, typename = typename std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type> @@ -466,7 +470,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class enable_shared_from_this { protected: - enable_shared_from_this() { } + constexpr enable_shared_from_this() { } enable_shared_from_this(const enable_shared_from_this&) { } diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index 4a30ea4..d39050f 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -443,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class __shared_count { public: - __shared_count() : _M_pi(0) // nothrow + constexpr __shared_count() : _M_pi(0) // nothrow { } template<typename _Ptr> @@ -635,7 +635,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class __weak_count { public: - __weak_count() : _M_pi(0) // nothrow + constexpr __weak_count() : _M_pi(0) // nothrow { } __weak_count(const __shared_count<_Lp>& __r) : _M_pi(__r._M_pi) // nothrow @@ -751,11 +751,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) public: typedef _Tp element_type; - __shared_ptr() : _M_ptr(0), _M_refcount() // never throws + constexpr __shared_ptr() + : _M_ptr(0), _M_refcount() // never throws { } template<typename _Tp1> - explicit __shared_ptr(_Tp1* __p) : _M_ptr(__p), _M_refcount(__p) + explicit __shared_ptr(_Tp1* __p) + : _M_ptr(__p), _M_refcount(__p) { __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>) static_assert( sizeof(_Tp1) > 0, "incomplete type" ); @@ -856,7 +858,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) #endif /* TODO: use delegating constructor */ - __shared_ptr(nullptr_t) : _M_ptr(0), _M_refcount() // never throws + constexpr __shared_ptr(nullptr_t) + : _M_ptr(0), _M_refcount() // never throws { } template<typename _Tp1> @@ -1163,7 +1166,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) public: typedef _Tp element_type; - __weak_ptr() : _M_ptr(0), _M_refcount() // never throws + constexpr __weak_ptr() + : _M_ptr(0), _M_refcount() // never throws { } // Generated copy constructor, assignment, destructor are fine. @@ -1324,7 +1328,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) class __enable_shared_from_this { protected: - __enable_shared_from_this() { } + constexpr __enable_shared_from_this() { } __enable_shared_from_this(const __enable_shared_from_this&) { } diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index ebbc521..4dc4ddd 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -46,20 +46,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std) /// Primary template, default_delete. template<typename _Tp> struct default_delete - { - default_delete() { } + { + constexpr default_delete() { } - template<typename _Up, typename = typename - std::enable_if<std::is_convertible<_Up*, _Tp*>::value>::type> - default_delete(const default_delete<_Up>&) { } + template<typename _Up, typename = typename + std::enable_if<std::is_convertible<_Up*, _Tp*>::value>::type> + default_delete(const default_delete<_Up>&) { } - void - operator()(_Tp* __ptr) const - { - static_assert(sizeof(_Tp)>0, - "can't delete pointer to incomplete type"); - delete __ptr; - } + void + operator()(_Tp* __ptr) const + { + static_assert(sizeof(_Tp)>0, + "can't delete pointer to incomplete type"); + delete __ptr; + } }; // _GLIBCXX_RESOLVE_LIB_DEFECTS @@ -68,6 +68,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template<typename _Tp> struct default_delete<_Tp[]> { + constexpr default_delete() { } + void operator()(_Tp* __ptr) const { @@ -108,8 +110,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) "constructed with null function pointer deleter"); // Constructors. - unique_ptr() - : _M_t(pointer(), deleter_type()) + constexpr unique_ptr() + : _M_t() { } explicit @@ -129,7 +131,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { static_assert(!std::is_reference<deleter_type>::value, "rvalue deleter bound to reference"); } - unique_ptr(nullptr_t) + constexpr unique_ptr(nullptr_t) : _M_t(pointer(), deleter_type()) { } @@ -271,7 +273,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) "constructed with null function pointer deleter"); // Constructors. - unique_ptr() + constexpr unique_ptr() : _M_t(pointer(), deleter_type()) { } @@ -292,7 +294,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) "rvalue deleter bound to reference"); } /* TODO: use delegating constructor */ - unique_ptr(nullptr_t) + constexpr unique_ptr(nullptr_t) : _M_t(pointer(), deleter_type()) { } diff --git a/libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc index 897394a..091f1b6 100644 --- a/libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc +++ b/libstdc++-v3/testsuite/20_util/default_delete/cons/constexpr.cc @@ -1,4 +1,4 @@ -// { dg-do compile { xfail *-*-* } } +// { dg-do compile } // { dg-options "-std=gnu++0x" } // Copyright (C) 2010 Free Software Foundation, Inc. @@ -24,6 +24,6 @@ int main() { __gnu_test::constexpr_default_constructible test; - test.operator()<std::default_delete<int>>(); // { dg-excess-errors "" } + test.operator()<std::default_delete<int>>(); return 0; } diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc index fb6cc8f..f30fd35 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/43820.cc @@ -32,9 +32,9 @@ void test01() { X* px = 0; std::shared_ptr<X> p1(px); // { dg-error "here" } - // { dg-error "incomplete" "" { target *-*-* } 762 } + // { dg-error "incomplete" "" { target *-*-* } 764 } std::shared_ptr<X> p9(ap()); // { dg-error "here" } - // { dg-error "incomplete" "" { target *-*-* } 854 } + // { dg-error "incomplete" "" { target *-*-* } 856 } } diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc deleted file mode 100644 index d040ea4..0000000 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/constexpr.cc +++ /dev/null @@ -1,33 +0,0 @@ -// { dg-do compile { xfail *-*-* } } -// { 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 test1; - test1.operator()<std::shared_ptr<int>>(); // { dg-excess-errors "" } - - __gnu_test::constexpr_single_value_constructible test2; - test2.operator()<std::shared_ptr<int>, std::nullptr_t>(); // { dg-excess-errors "" } - - return 0; -} diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc deleted file mode 100644 index 20db761..0000000 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr.cc +++ /dev/null @@ -1,32 +0,0 @@ -// { dg-do compile { xfail *-*-* } } -// { 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 test1; - test1.operator()<std::unique_ptr<int>>(); // { dg-excess-errors "" } - - __gnu_test::constexpr_single_value_constructible test2; - test2.operator()<std::unique_ptr<int>, std::nullptr_t>(); // { dg-excess-errors "" } - return 0; -} diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc index 42a4da9..4bc950f 100644 --- a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc +++ b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc @@ -41,9 +41,9 @@ main() return 0; } -// { dg-warning "note" "" { target *-*-* } 347 } -// { dg-warning "note" "" { target *-*-* } 1079 } -// { dg-warning "note" "" { target *-*-* } 465 } +// { dg-warning "note" "" { target *-*-* } 350 } +// { dg-warning "note" "" { target *-*-* } 1082 } +// { dg-warning "note" "" { target *-*-* } 467 } // { dg-warning "note" "" { target *-*-* } 580 } // { dg-warning "note" "" { target *-*-* } 1027 } // { dg-warning "note" "" { target *-*-* } 340 } diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc deleted file mode 100644 index 3b43769..0000000 --- a/libstdc++-v3/testsuite/20_util/weak_ptr/cons/constexpr.cc +++ /dev/null @@ -1,32 +0,0 @@ -// { dg-do compile { xfail *-*-* } } -// { 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::weak_ptr<int>>(); // { dg-excess-errors "" } - // test.operator()<std::__weak_ptr<int>>(); - // test.operator()<std::__weak_count<__gnu_cxx::__default_lock_policy>>(); - // test.operator()<std::_Sp_counted_base<__gnu_cxx::__default_lock_policy>>(); - return 0; -} diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h index a402bcf..c601063 100644 --- a/libstdc++-v3/testsuite/util/testsuite_common_types.h +++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h @@ -615,6 +615,7 @@ namespace __gnu_test // Generator to test default constructor. struct constexpr_default_constructible { + // NB: _Tp must be a literal type. template<typename _Tp> void operator()() @@ -633,6 +634,7 @@ namespace __gnu_test struct constexpr_single_value_constructible { + // NB: _Tbasetype and _Ttesttype must be literal types. template<typename _Ttesttype, typename _Tbasetype> void operator()() |