ptr_traits.h (__rebind): Replace with...

* include/bits/ptr_traits.h (__rebind): Replace with...
	(rebind): Implement using alias-declaration.
	* include/ext/pointer.h (__rebind): Replace with...
	(rebind): Implement using alias-declaration.
	* include/bits/alloc_traits.h (__rebind_alloc, __rebind_traits):
	Replace with...
	(rebind_alloc, rebind_traits): Implement using alias-declaration.
	* include/ext/alloc_traits.h (rebind): Use rebind_alloc instead of
	__rebind_alloc.
	* include/std/scoped_allocator (rebind): Likewise.

From-SVN: r181139
This commit is contained in:
Jonathan Wakely 2011-11-08 00:33:45 +00:00 committed by Jonathan Wakely
parent e23de0edd9
commit 7579d15b58
6 changed files with 26 additions and 79 deletions

View File

@ -1,3 +1,16 @@
2011-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/bits/ptr_traits.h (__rebind): Replace with...
(rebind): Implement using alias-declaration.
* include/ext/pointer.h (__rebind): Replace with...
(rebind): Implement using alias-declaration.
* include/bits/alloc_traits.h (__rebind_alloc, __rebind_traits):
Replace with...
(rebind_alloc, rebind_traits): Implement using alias-declaration.
* include/ext/alloc_traits.h (rebind): Use rebind_alloc instead of
__rebind_alloc.
* include/std/scoped_allocator (rebind): Likewise.
2011-11-07 Jonathan Wakely <jwakely.gcc@gmail.com>
* include/std/mutex (call_once): Store closure in __once_functor

View File

@ -102,10 +102,8 @@ _GLIBCXX_ALLOC_TR_NESTED_TYPE(pointer, value_type*)
*/
typedef __pointer pointer;
// TODO: Use pointer_traits::rebind alias template.
_GLIBCXX_ALLOC_TR_NESTED_TYPE(const_pointer,
typename pointer_traits<pointer>::template __rebind<const value_type>::__type)
typename pointer_traits<pointer>::template rebind<const value_type>)
/**
* @brief The allocator's const pointer type.
@ -116,7 +114,7 @@ _GLIBCXX_ALLOC_TR_NESTED_TYPE(const_pointer,
typedef __const_pointer const_pointer;
_GLIBCXX_ALLOC_TR_NESTED_TYPE(void_pointer,
typename pointer_traits<pointer>::template __rebind<void>::__type)
typename pointer_traits<pointer>::template rebind<void>)
/**
* @brief The allocator's void pointer type.
@ -127,7 +125,7 @@ _GLIBCXX_ALLOC_TR_NESTED_TYPE(void_pointer,
typedef __void_pointer void_pointer;
_GLIBCXX_ALLOC_TR_NESTED_TYPE(const_void_pointer,
typename pointer_traits<pointer>::template __rebind<const void>::__type)
typename pointer_traits<pointer>::template rebind<const void>)
/**
* @brief The allocator's const void pointer type.
@ -196,23 +194,10 @@ _GLIBCXX_ALLOC_TR_NESTED_TYPE(propagate_on_container_swap,
#undef _GLIBCXX_ALLOC_TR_NESTED_TYPE
/* TODO: use template alias
template<typename _Tp>
using rebind_alloc = __alloctr_rebind<_Alloc, _Tp>::__type;
using rebind_alloc = typename __alloctr_rebind<_Alloc, _Tp>::__type;
template<typename _Tp>
using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
*/
template<typename _Tp>
struct __rebind_alloc
{
typedef typename __alloctr_rebind<_Alloc, _Tp>::__type __type;
};
template<typename _Tp>
struct __rebind_traits
{
typedef allocator_traits<typename __rebind_alloc<_Tp>::__type> __type;
};
private:
template<typename _Alloc2>

View File

@ -86,46 +86,19 @@ _GLIBCXX_HAS_NESTED_TYPE(difference_type)
static const bool __value = _S_chk<_Ptr, _Up>(nullptr);
};
// hack to use _Tp::__rebind<_Up>::__type instead if that exists
template<typename _Ptr, typename _Up>
class __ptrtr_rebind_helper2
{
template<typename _Ptr2, typename _Up2>
static constexpr bool
_S_chk(typename _Ptr2::template __rebind<_Up2>::__type*)
{ return true; }
template<typename, typename>
static constexpr bool
_S_chk(...)
{ return false; }
public:
static const bool __value = _S_chk<_Ptr, _Up>(nullptr);
};
/* TODO: remove second bool when alias templates are supported */
template<typename _Tp, typename _Up,
bool = __ptrtr_rebind_helper<_Tp, _Up>::__value,
bool = __ptrtr_rebind_helper2<_Tp, _Up>::__value>
bool = __ptrtr_rebind_helper<_Tp, _Up>::__value>
struct __ptrtr_rebind;
template<typename _Tp, typename _Up, bool _B2>
struct __ptrtr_rebind<_Tp, _Up, true, _B2>
template<typename _Tp, typename _Up>
struct __ptrtr_rebind<_Tp, _Up, true>
{
typedef typename _Tp::template rebind<_Up> __type;
};
/* TODO: remove this when alias templates are supported */
template<typename _Tp, typename _Up>
struct __ptrtr_rebind<_Tp, _Up, false, true>
{
typedef typename _Tp::template __rebind<_Up>::__type __type;
};
template<template<typename, typename...> class _SomePtr, typename _Up,
typename _Tp, typename... _Args>
struct __ptrtr_rebind<_SomePtr<_Tp, _Args...>, _Up, false, false>
struct __ptrtr_rebind<_SomePtr<_Tp, _Args...>, _Up, false>
{
typedef _SomePtr<_Up, _Args...> __type;
};
@ -168,14 +141,8 @@ _GLIBCXX_HAS_NESTED_TYPE(difference_type)
typedef typename __ptrtr_diff_type<_Ptr>::__type difference_type;
private:
/* TODO: replace __rebind<U> with alias template rebind<U> */
/*
template<typename _Up>
using rebind<_Up> = typename __ptrtr_rebind<_Ptr, _Up>::__type;
*/
template<typename _Up>
struct __rebind
{ typedef typename __ptrtr_rebind<_Ptr, _Up>::__type __type; };
using rebind = typename __ptrtr_rebind<_Ptr, _Up>::__type;
// allocator_traits needs to use __rebind
template<typename> friend struct allocator_traits;
@ -197,13 +164,8 @@ _GLIBCXX_HAS_NESTED_TYPE(difference_type)
/// Type used to represent the difference between two pointers
typedef ptrdiff_t difference_type;
/* TODO: replace __rebind<U> with alias template rebind<U> */
/*
template<typename _Up>
using rebind<_Up> = U*;
*/
template<typename U>
struct __rebind { typedef U* __type; };
using rebind = _Up*;
/**
* @brief Obtain a pointer to an object

View File

@ -161,7 +161,7 @@ template<typename _Alloc>
template<typename _Tp>
struct rebind
{ typedef typename _Base_type::template __rebind_alloc<_Tp>::__type other; };
{ typedef typename _Base_type::template rebind_alloc<_Tp> other; };
#else
typedef typename _Alloc::pointer pointer;

View File

@ -577,21 +577,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// Type used to represent the difference between two pointers
typedef typename pointer::difference_type difference_type;
/* TODO: replace __rebind<U> with alias template rebind<U> */
/*
template<typename _Up>
using rebind<_Up> = typename __gnu_cxx::_Pointer_adapter<
using rebind = typename __gnu_cxx::_Pointer_adapter<
typename pointer_traits<_Storage_policy>::rebind<_Up>>
*/
template<typename _Up>
class __rebind
{
typedef pointer_traits<_Storage_policy> _Policy_traits;
typedef typename _Policy_traits::template __rebind<_Up>::__type
_Rebound_policy;
public:
typedef typename __gnu_cxx::_Pointer_adapter<_Rebound_policy> __type;
};
static pointer pointer_to(typename pointer::reference __r) noexcept
{ return pointer(std::addressof(__r)); }

View File

@ -267,9 +267,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <class _Tp>
struct rebind
{
// TODO: use rebind_alloc<Tp> instead of __rebind_alloc<Tp>::__type
typedef scoped_allocator_adaptor<
typename __traits::template __rebind_alloc<_Tp>::__type,
typename __traits::template rebind_alloc<_Tp>,
_InnerAllocs...> other;
};