+2009-02-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/unique_ptr.h: Remove private __this_type typedef.
+ * include/bits/stl_vector.h: Remove private vector_type typedef.
+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
+ Fix line numbers.
+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_1_neg.cc: Same.
+ * testsuite/23_containers/vector/requirements/dr438/
+ constructor_2_neg.cc: Same.
+ * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Same.
+ * testsuite/20_util/unique_ptr/assign/assign.cc: Same.
+
2009-02-03 Paolo Carlini <paolo.carlini@oracle.com>
- PR libstdc++/25191
+ PR libstdc++/25191
* libsupc++/exception_defines.h: Depending on __EXCEPTIONS,
deal consistently with __try and __catch too.
* src/localename.cc: Replace try -> __try, catch -> __catch.
__glibcxx_class_requires2(_Tp, _Alloc_value_type, _SameTypeConcept)
typedef _Vector_base<_Tp, _Alloc> _Base;
- typedef vector<_Tp, _Alloc> vector_type;
typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
public:
typedef typename _Tp_alloc_type::const_pointer const_pointer;
typedef typename _Tp_alloc_type::reference reference;
typedef typename _Tp_alloc_type::const_reference const_reference;
- typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
- typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
+ typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
+ typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
const_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
// unique_ptr implementation -*- C++ -*-
-// Copyright (C) 2008 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009 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
}
};
- /// 20.6.11.2 unique_ptr for single objects.
+ /// 20.7.12.2 unique_ptr for single objects.
template <typename _Tp, typename _Tp_Deleter = default_delete<_Tp> >
class unique_ptr
{
- typedef unique_ptr<_Tp, _Tp_Deleter> __this_type;
typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
- typedef __tuple_type __this_type::* __unspecified_bool_type;
- typedef _Tp* __this_type::* __unspecified_pointer_type;
+ typedef __tuple_type unique_ptr::* __unspecified_bool_type;
+ typedef _Tp* unique_ptr::* __unspecified_pointer_type;
public:
- typedef _Tp* pointer;
+ typedef _Tp* pointer;
typedef _Tp element_type;
typedef _Tp_Deleter deleter_type;
- // constructors
+ // Constructors.
unique_ptr()
: _M_t(pointer(), deleter_type())
{ static_assert(!std::is_pointer<deleter_type>::value,
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
- // move constructors
- unique_ptr(unique_ptr && __u)
+ // Move constructors.
+ unique_ptr(unique_ptr&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
template<typename _Up, typename _Up_Deleter>
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter()))
{ }
- // destructor
+ // Destructor.
~unique_ptr() { reset(); }
- // assignment
+ // Assignment.
unique_ptr&
operator=(unique_ptr&& __u)
{
return *this;
}
- // observers
+ // Observers.
typename std::add_lvalue_reference<element_type>::type operator*() const
{
_GLIBCXX_DEBUG_ASSERT(get() != 0);
{ return std::get<1>(_M_t); }
operator __unspecified_bool_type () const
- { return get() == 0 ? 0 : &__this_type::_M_t; }
+ { return get() == 0 ? 0 : &unique_ptr::_M_t; }
- // modifiers
+ // Modifiers.
pointer
release()
{
swap(_M_t, __u._M_t);
}
- // disable copy from lvalue
+ // Disable copy from lvalue.
unique_ptr(const unique_ptr&) = delete;
template<typename _Up, typename _Up_Deleter>
__tuple_type _M_t;
};
- /// 20.6.11.3 unique_ptr for array objects with a runtime length
+ /// 20.7.12.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 unique_ptr<_Tp[], _Tp_Deleter> __this_type;
- typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
- typedef __tuple_type __this_type::* __unspecified_bool_type;
- typedef _Tp* __this_type::* __unspecified_pointer_type;
+ typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
+ typedef __tuple_type unique_ptr::* __unspecified_bool_type;
+ typedef _Tp* unique_ptr::* __unspecified_pointer_type;
public:
- typedef _Tp* pointer;
+ typedef _Tp* pointer;
typedef _Tp element_type;
typedef _Tp_Deleter deleter_type;
- // constructors
+ // Constructors.
unique_ptr()
: _M_t(pointer(), deleter_type())
{ static_assert(!std::is_pointer<deleter_type>::value,
{ static_assert(!std::is_reference<deleter_type>::value,
"rvalue deleter bound to reference"); }
- // move constructors
+ // Move constructors.
unique_ptr(unique_ptr&& __u)
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
: _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter()))
{ }
- // destructor
+ // Destructor.
~unique_ptr() { reset(); }
- // assignment
+ // Assignment.
unique_ptr&
operator=(unique_ptr&& __u)
{
return *this;
}
- // observers
+ // Observers.
typename std::add_lvalue_reference<element_type>::type
operator[](size_t __i) const
{
{ return std::get<1>(_M_t); }
operator __unspecified_bool_type () const
- { return get() == 0 ? 0 : &__this_type::_M_t; }
+ { return get() == 0 ? 0 : &unique_ptr::_M_t; }
- // modifiers
+ // Modifiers.
pointer
release()
{
swap(_M_t, __u._M_t);
}
- // disable copy from lvalue
+ // Disable copy from lvalue.
unique_ptr(const unique_ptr&) = delete;
unique_ptr& operator=(const unique_ptr&) = delete;
- // disable construction from convertible pointer types
+ // Disable construction from convertible pointer types.
// (N2315 - 20.6.5.3.1)
template<typename _Up>
unique_ptr(_Up*, typename