diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2008-06-21 16:55:17 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-06-21 16:55:17 +0000 |
commit | ca0f8fd1ee8a143976c532a38c6d70c8368c811f (patch) | |
tree | bf5b8d8f97f3f38e9274be7a4d7d4a0aaef894d4 | |
parent | c764e1bde25f261ede6ec23a4b3868d336b460ad (diff) | |
download | gcc-ca0f8fd1ee8a143976c532a38c6d70c8368c811f.zip gcc-ca0f8fd1ee8a143976c532a38c6d70c8368c811f.tar.gz gcc-ca0f8fd1ee8a143976c532a38c6d70c8368c811f.tar.bz2 |
[multiple changes]
2008-06-21 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_move.h: Rename to move.h.
* include/std/utility: Adjust.
* include/ext/vstring_util.h: Likewise.
* include/ext/throw_allocator.h: Likewise.
* include/ext/pool_allocator.h: Likewise.
* include/ext/bitmap_allocator.h: Likewise.
* include/ext/new_allocator.h: Likewise.
* include/ext/malloc_allocator.h: Likewise.
* include/ext/array_allocator.h: Likewise.
* include/ext/mt_allocator.h: Likewise.
* include/bits/stl_algobase.h: Likewise.
* include/bits/stl_heap.h: Likewise.
* include/bits/stl_pair.h: Likewise.
* include/bits/stl_iterator.h: Likewise.
* testsuite/util/testsuite_allocator.h: Likewise.
* testsuite/util/testsuite_iterators.h: Likewise.
* include/Makefile.am: Likewise.
* include/Makefile.in: Regenerate.
2008-06-21 Chris Fairles <chris.fairles@gmail.com>
* include/bits/unique_ptr.h: New.
* include/std/memory: Adjust.
* include/Makefile.am: Add.
* testsuite/20_util/unique_ptr/requirements/explicit_instantiation/
explicit_instantiation.cc: New.
* testsuite/20_util/unique_ptr/assign/assign.cc: Likewise.
* include/Makefile.in: Regenerate.
From-SVN: r137003
22 files changed, 588 insertions, 29 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 631ff26..dc39a51 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,34 @@ +2008-06-21 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_move.h: Rename to move.h. + * include/std/utility: Adjust. + * include/ext/vstring_util.h: Likewise. + * include/ext/throw_allocator.h: Likewise. + * include/ext/pool_allocator.h: Likewise. + * include/ext/bitmap_allocator.h: Likewise. + * include/ext/new_allocator.h: Likewise. + * include/ext/malloc_allocator.h: Likewise. + * include/ext/array_allocator.h: Likewise. + * include/ext/mt_allocator.h: Likewise. + * include/bits/stl_algobase.h: Likewise. + * include/bits/stl_heap.h: Likewise. + * include/bits/stl_pair.h: Likewise. + * include/bits/stl_iterator.h: Likewise. + * testsuite/util/testsuite_allocator.h: Likewise. + * testsuite/util/testsuite_iterators.h: Likewise. + * include/Makefile.am: Likewise. + * include/Makefile.in: Regenerate. + +2008-06-21 Chris Fairles <chris.fairles@gmail.com> + + * include/bits/unique_ptr.h: New. + * include/std/memory: Adjust. + * include/Makefile.am: Add. + * testsuite/20_util/unique_ptr/requirements/explicit_instantiation/ + explicit_instantiation.cc: New. + * testsuite/20_util/unique_ptr/assign/assign.cc: Likewise. + * include/Makefile.in: Regenerate. + 2008-06-21 Jonathan Wakely <jwakely.gcc@gmail.com> * include/c_global/climits, include/tr1/climits: Add parentheses. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 7a8579d..8ef1fce 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -104,6 +104,7 @@ bits_headers = \ ${bits_srcdir}/locale_facets_nonio.tcc \ ${bits_srcdir}/localefwd.h \ ${bits_srcdir}/mask_array.h \ + ${bits_srcdir}/move.h \ ${bits_srcdir}/ostream.tcc \ ${bits_srcdir}/ostream_insert.h \ ${bits_srcdir}/postypes.h \ @@ -123,7 +124,6 @@ bits_headers = \ ${bits_srcdir}/stl_iterator_base_types.h \ ${bits_srcdir}/stl_list.h \ ${bits_srcdir}/stl_map.h \ - ${bits_srcdir}/stl_move.h \ ${bits_srcdir}/stl_multimap.h \ ${bits_srcdir}/stl_multiset.h \ ${bits_srcdir}/stl_numeric.h \ @@ -139,6 +139,7 @@ bits_headers = \ ${bits_srcdir}/stl_vector.h \ ${bits_srcdir}/streambuf.tcc \ ${bits_srcdir}/stringfwd.h \ + ${bits_srcdir}/unique_ptr.h \ ${bits_srcdir}/valarray_array.h \ ${bits_srcdir}/valarray_array.tcc \ ${bits_srcdir}/valarray_before.h \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 366b7c9..f96020f 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -357,6 +357,7 @@ bits_headers = \ ${bits_srcdir}/locale_facets_nonio.tcc \ ${bits_srcdir}/localefwd.h \ ${bits_srcdir}/mask_array.h \ + ${bits_srcdir}/move.h \ ${bits_srcdir}/ostream.tcc \ ${bits_srcdir}/ostream_insert.h \ ${bits_srcdir}/postypes.h \ @@ -376,7 +377,6 @@ bits_headers = \ ${bits_srcdir}/stl_iterator_base_types.h \ ${bits_srcdir}/stl_list.h \ ${bits_srcdir}/stl_map.h \ - ${bits_srcdir}/stl_move.h \ ${bits_srcdir}/stl_multimap.h \ ${bits_srcdir}/stl_multiset.h \ ${bits_srcdir}/stl_numeric.h \ @@ -392,6 +392,7 @@ bits_headers = \ ${bits_srcdir}/stl_vector.h \ ${bits_srcdir}/streambuf.tcc \ ${bits_srcdir}/stringfwd.h \ + ${bits_srcdir}/unique_ptr.h \ ${bits_srcdir}/valarray_array.h \ ${bits_srcdir}/valarray_array.tcc \ ${bits_srcdir}/valarray_before.h \ diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 9c64ef1..4378ce8 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -74,7 +74,7 @@ #include <bits/stl_iterator.h> #include <bits/concept_check.h> #include <debug/debug.h> -#include <bits/stl_move.h> // For std::swap and _GLIBCXX_MOVE +#include <bits/move.h> // For std::swap and _GLIBCXX_MOVE _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index 4deafd2f..6b0840c 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -62,7 +62,7 @@ #define _STL_HEAP_H 1 #include <debug/debug.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index b041d34..0d66129 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -68,7 +68,7 @@ #include <bits/cpp_type_traits.h> #include <ext/type_traits.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 3bda501..5ac85e2 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -1,6 +1,6 @@ // Pair implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -62,8 +62,8 @@ #ifndef _STL_PAIR_H #define _STL_PAIR_H 1 -#include <bits/stl_move.h> // for std::move / std::forward, std::decay, and - // std::swap +#include <bits/move.h> // for std::move / std::forward, std::decay, and + // std::swap _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h new file mode 100644 index 0000000..f2c13b5 --- /dev/null +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -0,0 +1,447 @@ +// unique_ptr implementation -*- C++ -*- + +// Copyright (C) 2008 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. + +/** @file unique_ptr.h + * This is an internal header file, included by other library headers. + * You should not attempt to use it directly. + */ + +#ifndef _UNIQUE_PTR_H +#define _UNIQUE_PTR_H 1 + +#ifndef __GXX_EXPERIMENTAL_CXX0X__ +# include <c++0x_warning.h> +#endif + +#include <bits/c++config.h> +#include <debug/debug.h> +#include <type_traits> +#include <utility> +#include <tuple> + +_GLIBCXX_BEGIN_NAMESPACE(std) + + template<typename _Tp> + struct default_delete + { + default_delete() { } + + template<typename _Up> + 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; + } + }; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 740 - omit specialization for array objects with a compile time length + template<typename _Tp> + struct default_delete<_Tp[]> + { + void + operator()(_Tp* __ptr) const + { + static_assert(sizeof(_Tp)>0, + "can't delete pointer to incomplete type"); + delete [] __ptr; + } + }; + + template <typename _Tp, typename _Tp_Deleter = default_delete<_Tp> > + class unique_ptr + { + typedef _Tp* pointer; + typedef unique_ptr<_Tp, _Tp_Deleter> __this_type; + typedef std::tuple<pointer, _Tp_Deleter> __tuple_type; + typedef __tuple_type __this_type::* __unspecified_bool_type; + typedef pointer __this_type::* __unspecified_pointer_type; + + public: + typedef _Tp element_type; + typedef _Tp_Deleter deleter_type; + + // constructors + unique_ptr() + : _M_t(pointer(), deleter_type()) + { static_assert(!std::is_pointer<deleter_type>::value, + "constructed with null function pointer deleter"); } + + explicit + unique_ptr(pointer __p) + : _M_t(__p, deleter_type()) + { static_assert(!std::is_pointer<deleter_type>::value, + "constructed with null function pointer deleter"); } + + unique_ptr(pointer __p, + typename std::conditional<std::is_reference<deleter_type>::value, + deleter_type, const deleter_type&>::type __d) + : _M_t(__p, __d) { } + + unique_ptr(pointer __p, + typename std::remove_reference<deleter_type>::type&& __d) + : _M_t(std::move(__p), std::move(__d)) + { static_assert(!std::is_reference<deleter_type>::value, + "rvalue deleter bound to reference"); } + + // move constructors + unique_ptr(unique_ptr && __u) + : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { } + + template<typename _Up, typename _Up_Deleter> + unique_ptr(unique_ptr<_Up, _Up_Deleter>&& __u) + : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) + { } + + // destructor + ~unique_ptr() { reset(); } + + // assignment + unique_ptr& + operator=(unique_ptr&& __u) + { + reset(__u.release()); + get_deleter() = std::move(__u.get_deleter()); + return *this; + } + + template<typename _Up, typename _Up_Deleter> + unique_ptr& + operator=(unique_ptr<_Up, _Up_Deleter>&& __u) + { + reset(__u.release()); + get_deleter() = std::move(__u.get_deleter()); + return *this; + } + + unique_ptr& + operator=(__unspecified_pointer_type) + { + reset(); + return *this; + } + + // observers + typename std::add_lvalue_reference<element_type>::type operator*() const + { + _GLIBCXX_DEBUG_ASSERT(get() != 0); + return *get(); + } + + pointer + operator->() const + { + _GLIBCXX_DEBUG_ASSERT(get() != 0); + return get(); + } + + pointer + get() const + { return std::get<0>(_M_t); } + + typename std::add_lvalue_reference<deleter_type>::type + get_deleter() + { return std::get<1>(_M_t); } + + typename std::add_lvalue_reference< + typename std::add_const<deleter_type>::type + >::type + get_deleter() const + { return std::get<1>(_M_t); } + + operator __unspecified_bool_type () const + { return get() == 0 ? 0 : &__this_type::_M_t; } + + // modifiers + pointer + release() + { + pointer __p = get(); + std::get<0>(_M_t) = 0; + return __p; + } + + void + reset(pointer __p = 0) + { + if (__p != get()) + { + get_deleter()(get()); + std::get<0>(_M_t) = __p; + } + } + + void + swap(unique_ptr&& __u) + { using std::swap; + swap(_M_t, __u._M_t); + } + + private: + // disable copy from lvalue + unique_ptr(const unique_ptr&); + + template<typename _Up, typename _Up_Deleter> + unique_ptr(const unique_ptr<_Up, _Up_Deleter>&); + + // disable assignment from lvalue + unique_ptr& operator=(const unique_ptr&); + + template<typename _Up, typename _Up_Deleter> + unique_ptr& operator=(const unique_ptr<_Up, _Up_Deleter>&); + + private: + __tuple_type _M_t; + }; + + // 20.6.11.3 unique_ptr for array objects with a runtime length + // [unique.ptr.runtime] + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // DR 740 - omit specialization for array objects with a compile time length + template<typename _Tp, typename _Tp_Deleter> + class unique_ptr<_Tp[], _Tp_Deleter> + { + typedef _Tp* pointer; + typedef unique_ptr<_Tp[], _Tp_Deleter> __this_type; + typedef std::tuple<pointer, _Tp_Deleter> __tuple_type; + typedef __tuple_type __this_type::* __unspecified_bool_type; + typedef pointer __this_type::* __unspecified_pointer_type; + public: + typedef _Tp element_type; + typedef _Tp_Deleter deleter_type; + + // constructors + unique_ptr() + : _M_t(pointer(), deleter_type()) + { static_assert(!std::is_pointer<deleter_type>::value, + "constructed with null function pointer deleter"); } + + explicit + unique_ptr(pointer __p) + : _M_t(__p, deleter_type()) + { static_assert(!std::is_pointer<deleter_type>::value, + "constructed with null function pointer deleter"); } + + unique_ptr(pointer __p, + typename std::conditional<std::is_reference<deleter_type>::value, + deleter_type, const deleter_type&>::type __d) + : _M_t(__p, __d) { } + + unique_ptr(pointer __p, + typename std::remove_reference<deleter_type>::type && __d) + : _M_t(std::move(__p), std::move(__d)) + { static_assert(!std::is_reference<deleter_type>::value, + "rvalue deleter bound to reference"); } + + // move constructors + unique_ptr(unique_ptr&& __u) + : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { } + + template<typename _Up, typename _Up_Deleter> + unique_ptr(unique_ptr<_Up, _Up_Deleter>&& __u) + : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) + { } + + // destructor + ~unique_ptr() { reset(); } + + // assignment + unique_ptr& + operator=(unique_ptr&& __u) + { + reset(__u.release()); + get_deleter() = std::move(__u.get_deleter()); + return *this; + } + + template<typename _Up, typename _Up_Deleter> + unique_ptr& + operator=(unique_ptr<_Up, _Up_Deleter>&& __u) + { + reset(__u.release()); + get_deleter() = std::move(__u.get_deleter()); + return *this; + } + + unique_ptr& + operator=(__unspecified_pointer_type) + { + reset(); + return *this; + } + + // observers + typename std::add_lvalue_reference<element_type>::type + operator[](size_t __i) const + { + _GLIBCXX_DEBUG_ASSERT(get() != 0); + return get()[__i]; + } + + pointer + get() const + { return std::get<0>(_M_t); } + + typename std::add_lvalue_reference<deleter_type>::type + get_deleter() + { return std::get<1>(_M_t); } + + typename std::add_lvalue_reference< + typename std::add_const<deleter_type>::type + >::type + get_deleter() const + { return std::get<1>(_M_t); } + + operator __unspecified_bool_type () const + { return get() == 0 ? 0 : &__this_type::_M_t; } + + // modifiers + pointer + release() + { + pointer __p = get(); + std::get<0>(_M_t) = 0; + return __p; + } + + void + reset(pointer __p = 0) + { + if (__p != get()) + { + get_deleter()(get()); + std::get<0>(_M_t) = __p; + } + } + + void + swap(unique_ptr&& __u) + { + using std::swap; + swap(_M_t, __u._M_t); + } + + private: + // disable copy from lvalue + unique_ptr(const unique_ptr&); + unique_ptr& operator=(const unique_ptr&); + + // disable construction from convertible pointer types + // (N2315 - 20.6.5.3.1) + template<typename _Up> unique_ptr(_Up*, + typename std::conditional<std::is_reference<deleter_type>::value, + deleter_type, const deleter_type&>::type, + typename std::enable_if<std::is_convertible<_Up*, + pointer>::value>::type* = 0); + + template<typename _Up> unique_ptr(_Up*, + typename std::remove_reference<deleter_type>::type&&, + typename std::enable_if<std::is_convertible<_Up*, + pointer>::value>::type* = 0); + + template<typename _Up> explicit unique_ptr(_Up*, + typename std::enable_if<std::is_convertible<_Up*, + pointer>::value>::type* = 0); + + // disable reset with convertible pointer types (N2315 - 20.6.5.3.3) + template<typename _Up> + typename std::enable_if<std::is_convertible<_Up*, + pointer>::value>::type reset(_Up*); + + private: + __tuple_type _M_t; + }; + + template<typename _Tp, typename _Tp_Deleter> + inline void + swap(unique_ptr<_Tp, _Tp_Deleter>& __x, + unique_ptr<_Tp, _Tp_Deleter>& __y) + { __x.swap(__y); } + + template<typename _Tp, typename _Tp_Deleter> + inline void + swap(unique_ptr<_Tp, _Tp_Deleter>&& __x, + unique_ptr<_Tp, _Tp_Deleter>& __y) + { __x.swap(__y); } + + template<typename _Tp, typename _Tp_Deleter> + inline void + swap(unique_ptr<_Tp, _Tp_Deleter>& __x, + unique_ptr<_Tp, _Tp_Deleter>&& __y) + { __x.swap(__y); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator==(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return __x.get() == __y.get(); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator!=(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return !(__x.get() == __y.get()); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator<(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return __x.get() < __y.get(); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator<=(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return !(__y.get() < __x.get()); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator>(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return __y.get() < __x.get(); } + + template<typename _Tp, typename _Tp_Deleter, + typename _Up, typename _Up_Deleter> + inline bool + operator>=(const unique_ptr<_Tp, _Tp_Deleter>& __x, + const unique_ptr<_Up, _Up_Deleter>& __y) + { return !(__x.get() < __y.get()); } + +_GLIBCXX_END_NAMESPACE + +#endif /* _UNIQUE_PTR_H */ diff --git a/libstdc++-v3/include/ext/array_allocator.h b/libstdc++-v3/include/ext/array_allocator.h index a2e28f9..665769d 100644 --- a/libstdc++-v3/include/ext/array_allocator.h +++ b/libstdc++-v3/include/ext/array_allocator.h @@ -1,6 +1,6 @@ // array allocator -*- C++ -*- -// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007, 2008 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 @@ -38,7 +38,7 @@ #include <new> #include <bits/functexcept.h> #include <tr1/array> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/bitmap_allocator.h b/libstdc++-v3/include/ext/bitmap_allocator.h index 5e553b0..7f5466a 100644 --- a/libstdc++-v3/include/ext/bitmap_allocator.h +++ b/libstdc++-v3/include/ext/bitmap_allocator.h @@ -1,6 +1,6 @@ // Bitmap Allocator. -*- C++ -*- -// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007, 2008 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 @@ -41,7 +41,7 @@ #include <new> // For operator new. #include <debug/debug.h> // _GLIBCXX_DEBUG_ASSERT #include <ext/concurrence.h> -#include <bits/stl_move.h> +#include <bits/move.h> /** @brief The constant in the expression below is the alignment * required in bytes. diff --git a/libstdc++-v3/include/ext/malloc_allocator.h b/libstdc++-v3/include/ext/malloc_allocator.h index a5d31684..54d9c96 100644 --- a/libstdc++-v3/include/ext/malloc_allocator.h +++ b/libstdc++-v3/include/ext/malloc_allocator.h @@ -1,6 +1,6 @@ // Allocator that wraps "C" malloc -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -38,7 +38,7 @@ #include <cstdlib> #include <new> #include <bits/functexcept.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/mt_allocator.h b/libstdc++-v3/include/ext/mt_allocator.h index 08aa311..7defebc 100644 --- a/libstdc++-v3/include/ext/mt_allocator.h +++ b/libstdc++-v3/include/ext/mt_allocator.h @@ -1,6 +1,7 @@ // MT-optimized allocator -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 +// 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 @@ -38,7 +39,7 @@ #include <cstdlib> #include <bits/functexcept.h> #include <ext/atomicity.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h index 14f1de9..aeda02f 100644 --- a/libstdc++-v3/include/ext/new_allocator.h +++ b/libstdc++-v3/include/ext/new_allocator.h @@ -36,7 +36,7 @@ #include <new> #include <bits/functexcept.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/pool_allocator.h b/libstdc++-v3/include/ext/pool_allocator.h index c4d2ef2..96eedd8 100644 --- a/libstdc++-v3/include/ext/pool_allocator.h +++ b/libstdc++-v3/include/ext/pool_allocator.h @@ -54,7 +54,7 @@ #include <bits/functexcept.h> #include <ext/atomicity.h> #include <ext/concurrence.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/throw_allocator.h b/libstdc++-v3/include/ext/throw_allocator.h index 36dc3c0..41c7603 100644 --- a/libstdc++-v3/include/ext/throw_allocator.h +++ b/libstdc++-v3/include/ext/throw_allocator.h @@ -1,6 +1,6 @@ // -*- C++ -*- -// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2007, 2008 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 @@ -60,7 +60,7 @@ #include <utility> #include <tr1/random> #include <bits/functexcept.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/ext/vstring_util.h b/libstdc++-v3/include/ext/vstring_util.h index 5725e0a..8a080bf 100644 --- a/libstdc++-v3/include/ext/vstring_util.h +++ b/libstdc++-v3/include/ext/vstring_util.h @@ -1,6 +1,6 @@ // Versatile string utility -*- C++ -*- -// Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2005, 2006, 2007, 2008 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 @@ -46,7 +46,7 @@ #include <bits/ostream_insert.h> #include <bits/stl_iterator.h> #include <ext/numeric_traits.h> -#include <bits/stl_move.h> +#include <bits/move.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory index 2e78e3f..81b0c69 100644 --- a/libstdc++-v3/include/std/memory +++ b/libstdc++-v3/include/std/memory @@ -1,6 +1,6 @@ // <memory> -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -69,6 +69,7 @@ # include <ext/concurrence.h> # include <bits/functexcept.h> # include <bits/stl_function.h> // std::less +# include <bits/unique_ptr.h> # include <debug/debug.h> # include <type_traits> # if _GLIBCXX_DEPRECATED diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index 67e4b73..027d513 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -1,6 +1,6 @@ // <utility> -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -84,7 +84,7 @@ # undef _GLIBCXX_BEGIN_NAMESPACE_TR1 # undef _GLIBCXX_INCLUDE_AS_CXX0X # endif -# include <bits/stl_move.h> +# include <bits/move.h> #endif #endif /* _GLIBCXX_UTILITY */ diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign.cc new file mode 100644 index 0000000..559ade3 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign.cc @@ -0,0 +1,52 @@ +// { dg-do compile } +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2008 Free Software Foundation +// +// 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> + +struct base { virtual ~base() {} }; +struct derived : base {}; + +void +test01() +{ + std::unique_ptr<derived> p1(new derived); + std::unique_ptr<derived> p2(new derived); +// p2 = p1; // should not compile + p2 = std::move(p1); + std::unique_ptr<base> p3(new base); +// p3 = p2; // should not compile + p3 = std::move(p2); +} + +void +test02() +{ + std::unique_ptr<int[]> p1(new int(420)); + std::unique_ptr<int[]> p2 = p1; // { dg-error "within this context" } +} + +void +test03() +{ + std::unique_ptr<int[2]> p1(new int[3]); + std::unique_ptr<int[2]> p2 = p1; // { dg-error "within this context" } +} +// { dg-excess-errors "is private" } diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc new file mode 100644 index 0000000..4ce1422 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/explicit_instantiation/explicit_instantiation.cc @@ -0,0 +1,25 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2008 Free Software Foundation +// +// 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> + +template class std::unique_ptr<int>; +template class std::unique_ptr<int[]>; diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h index 6411568..a965f5b 100644 --- a/libstdc++-v3/testsuite/util/testsuite_allocator.h +++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h @@ -1,7 +1,7 @@ // -*- C++ -*- // Testing allocator for the C++ library testsuite. // -// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -39,7 +39,7 @@ #include <cstddef> #include <tr1/unordered_map> #include <cassert> -#include <bits/stl_move.h> +#include <bits/move.h> namespace { diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h index 7a12419..e319a6c 100644 --- a/libstdc++-v3/testsuite/util/testsuite_iterators.h +++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h @@ -1,7 +1,7 @@ // -*- C++ -*- // Iterator Wrappers for the C++ library testsuite. // -// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007, 2008 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 @@ -38,7 +38,7 @@ #include <testsuite_hooks.h> #include <bits/stl_iterator_base_types.h> -#include <bits/stl_move.h> +#include <bits/move.h> #ifndef _TESTSUITE_ITERATORS #define _TESTSUITE_ITERATORS |