Patchwork [v3] Ext Ptr tweaks

login
register
mail settings
Submitter Jonathan Wakely
Date July 9, 2011, 10:29 a.m.
Message ID <CAH6eHdSUNXLZS+QySoFQis76g22=r8P3jgW7UckoeQBpdcNGig@mail.gmail.com>
Download mbox | patch
Permalink /patch/103967/
State New
Headers show

Comments

Jonathan Wakely - July 9, 2011, 10:29 a.m.
* include/ext/cast.h: Fix typo in include guard.
        * include/ext/pointer.h (_Unqualified_type): Remove redundant
        partial specializations for volatile types. Fix typos in comments.
        (pointer_traits<_Pointer_adaptor<Tp>>::pointer_to): Define.

Tested x86_64-linux, committed to trunk.

Patch

Index: include/ext/cast.h
===================================================================
--- include/ext/cast.h	(revision 176072)
+++ include/ext/cast.h	(working copy)
@@ -118,4 +118,4 @@ 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
 
-#endif // __GLIBCXX_CAST_H
+#endif // _GLIBCXX_CAST_H
Index: include/ext/pointer.h
===================================================================
--- include/ext/pointer.h	(revision 176072)
+++ include/ext/pointer.h	(working copy)
@@ -232,7 +232,7 @@ 
     { typedef const volatile _Invalid_type&  reference; };
 
   /**
-   * This structure accomodates the way in which
+   * This structure accommodates the way in which
    * std::iterator_traits<> is normally specialized for const T*, so
    * that value_type is still T.
    */
@@ -244,14 +244,6 @@ 
     struct _Unqualified_type<const _Tp> 
     { typedef _Tp type; };
     
-  template<typename _Tp> 
-    struct _Unqualified_type<volatile _Tp> 
-    { typedef volatile _Tp type; };
-    
-  template<typename _Tp> 
-    struct _Unqualified_type<volatile const _Tp> 
-    { typedef volatile _Tp type; };
-  
   /**
    * The following provides an 'alternative pointer' that works with
    * the containers when specified as the pointer typedef of the
@@ -266,7 +258,7 @@ 
    * so that it becomes reusable for creating other pointer types.
    *
    * A key point of this class is also that it allows container
-   * writers to 'assume' Alocator::pointer is a typedef for a normal
+   * writers to 'assume' Allocator::pointer is a typedef for a normal
    * pointer.  This class supports most of the conventions of a true
    * pointer, and can, for instance handle implicit conversion to
    * const and base class pointer types.  The only impositions on
@@ -274,7 +266,7 @@ 
    * Allocator::pointer typedef appropriately for pointer types.  2)
    * if you need pointer casting, use the __pointer_cast<> functions
    * from ext/cast.h.  This allows pointer cast operations to be
-   * overloaded is necessary by custom pointers.
+   * overloaded as necessary by custom pointers.
    *
    * Note: The const qualifier works with this pointer adapter as
    * follows:
@@ -437,7 +429,7 @@ 
       } \
 // END of _CXX_POINTER_ARITH_OPERATOR_SET macro
   
-      // Expand into the various pointer arithmatic operators needed.
+      // Expand into the various pointer arithmetic operators needed.
       _CXX_POINTER_ARITH_OPERATOR_SET(short);
       _CXX_POINTER_ARITH_OPERATOR_SET(unsigned short);
       _CXX_POINTER_ARITH_OPERATOR_SET(int);
@@ -528,7 +520,7 @@ 
     { return __rhs.get() != reinterpret_cast<void*>(__lhs); } 
 
   /**
-   * Comparison operators for _Pointer_adapter defer to the base class'es
+   * Comparison operators for _Pointer_adapter defer to the base class'
    * comparison operators, when possible.
    */
   template<typename _Tp>
@@ -600,6 +592,9 @@ 
         public:
           typedef typename __gnu_cxx::_Pointer_adapter<_Rebound_policy> __type;
         };
+
+      static pointer pointer_to(typename pointer::reference __r) noexcept
+      { return pointer(std::addressof(__r)); }
     };
 
 _GLIBCXX_END_NAMESPACE_VERSION