diff mbox

PR78052 Define std::allocator<void>::{construct,destroy}

Message ID 20161020113721.GG2922@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Oct. 20, 2016, 11:37 a.m. UTC
On 20/10/16 11:12 +0100, Jonathan Wakely wrote:
>This let's std::allocator<void> be used in situations like:

>

>std::allocate_shared<int>(std::allocator<void>(), 1);

>

>where a "proto-allocator" is required. The other members such as

>allocate() and max_size() don't make sense for void, but construct and

>destroy don't depend on value_type.

>

>	PR libstdc++/78052

>	* include/bits/allocator.h (allocator<void>::construct)

>	(allocator<void>::destroy): Define.

>	* testsuite/20_util/allocator/void.cc: New test.

>

>Tested x86_64-linux, committed to trunk. Also applying to gcc-5 and

>gcc-6 branches, because this used to work before I put in the

>allocator_traits<allocator<T>> partial specialization.


Some whitespace cleanup in the allocator files.

Committed to trunk.
diff mbox

Patch

commit 5612ef6e6ed6ffec81b8499f8a72753ae017ca92
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Oct 20 12:02:06 2016 +0100

    Tweak whitespace in std::allocator files
    
    	* include/bits/allocator.h: Remove trailing whitespace, tab-indent.
    	* include/ext/new_allocator.h: Likewise.

diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index 9fb5842..327e250 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -75,8 +75,8 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef void        value_type;
 
       template<typename _Tp1>
-        struct rebind
-        { typedef allocator<_Tp1> other; };
+	struct rebind
+	{ typedef allocator<_Tp1> other; };
 
 #if __cplusplus >= 201103L
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -86,13 +86,13 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef true_type is_always_equal;
 
       template<typename _Up, typename... _Args>
-        void
-        construct(_Up* __p, _Args&&... __args)
+	void
+	construct(_Up* __p, _Args&&... __args)
 	{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
 
       template<typename _Up>
-        void
-        destroy(_Up* __p) { __p->~_Up(); }
+	void
+	destroy(_Up* __p) { __p->~_Up(); }
 #endif
     };
 
@@ -117,8 +117,8 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef _Tp        value_type;
 
       template<typename _Tp1>
-        struct rebind
-        { typedef allocator<_Tp1> other; };
+	struct rebind
+	{ typedef allocator<_Tp1> other; };
 
 #if __cplusplus >= 201103L
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -134,7 +134,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       : __allocator_base<_Tp>(__a) { }
 
       template<typename _Tp1>
-        allocator(const allocator<_Tp1>&) throw() { }
+	allocator(const allocator<_Tp1>&) throw() { }
 
       ~allocator() throw() { }
 
diff --git a/libstdc++-v3/include/ext/new_allocator.h b/libstdc++-v3/include/ext/new_allocator.h
index 2ff4780..7633029 100644
--- a/libstdc++-v3/include/ext/new_allocator.h
+++ b/libstdc++-v3/include/ext/new_allocator.h
@@ -48,7 +48,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
    *  @brief  An allocator that uses global new, as per [20.4].
    *  @ingroup allocators
    *
-   *  This is precisely the allocator defined in the C++ Standard. 
+   *  This is precisely the allocator defined in the C++ Standard.
    *    - all allocation calls operator new
    *    - all deallocation calls operator delete
    *
@@ -67,8 +67,8 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       typedef _Tp        value_type;
 
       template<typename _Tp1>
-        struct rebind
-        { typedef new_allocator<_Tp1> other; };
+	struct rebind
+	{ typedef new_allocator<_Tp1> other; };
 
 #if __cplusplus >= 201103L
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
@@ -81,7 +81,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       new_allocator(const new_allocator&) _GLIBCXX_USE_NOEXCEPT { }
 
       template<typename _Tp1>
-        new_allocator(const new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { }
+	new_allocator(const new_allocator<_Tp1>&) _GLIBCXX_USE_NOEXCEPT { }
 
       ~new_allocator() _GLIBCXX_USE_NOEXCEPT { }
 
@@ -97,7 +97,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
       // about what the return value is when __n == 0.
       pointer
       allocate(size_type __n, const void* = 0)
-      { 
+      {
 	if (__n > this->max_size())
 	  std::__throw_bad_alloc();
 
@@ -131,21 +131,21 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #if __cplusplus >= 201103L
       template<typename _Up, typename... _Args>
-        void
-        construct(_Up* __p, _Args&&... __args)
+	void
+	construct(_Up* __p, _Args&&... __args)
 	{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
 
       template<typename _Up>
-        void 
-        destroy(_Up* __p) { __p->~_Up(); }
+	void
+	destroy(_Up* __p) { __p->~_Up(); }
 #else
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
       // 402. wrong new expression in [some_] allocator::construct
-      void 
-      construct(pointer __p, const _Tp& __val) 
+      void
+      construct(pointer __p, const _Tp& __val)
       { ::new((void *)__p) _Tp(__val); }
 
-      void 
+      void
       destroy(pointer __p) { __p->~_Tp(); }
 #endif
     };
@@ -154,7 +154,7 @@  _GLIBCXX_BEGIN_NAMESPACE_VERSION
     inline bool
     operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
     { return true; }
-  
+
   template<typename _Tp>
     inline bool
     operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)