We don't need separate overloads for returning a const or non-const
pointer. We can make the member function const and return a non-const
pointer, and let `vector::data() const` convert it to const as needed.

libstdc++-v3/ChangeLog:

        * include/bits/stl_vector.h (vector::_M_data_ptr): Remove
        non-const overloads. Always return non-const pointer.
---

Tested x86_64-linux.

 libstdc++-v3/include/bits/stl_vector.h | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/libstdc++-v3/include/bits/stl_vector.h 
b/libstdc++-v3/include/bits/stl_vector.h
index e284536ad31..8982ca2b9ee 100644
--- a/libstdc++-v3/include/bits/stl_vector.h
+++ b/libstdc++-v3/include/bits/stl_vector.h
@@ -2034,20 +2034,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
        _M_data_ptr(_Ptr __ptr) const
        { return empty() ? nullptr : std::__to_address(__ptr); }
 #else
-      template<typename _Up>
-       _Up*
-       _M_data_ptr(_Up* __ptr) _GLIBCXX_NOEXCEPT
-       { return __ptr; }
-
       template<typename _Ptr>
        value_type*
-       _M_data_ptr(_Ptr __ptr)
-       { return empty() ? (value_type*)0 : __ptr.operator->(); }
-
-      template<typename _Ptr>
-       const value_type*
        _M_data_ptr(_Ptr __ptr) const
-       { return empty() ? (const value_type*)0 : __ptr.operator->(); }
+       { return empty() ? (value_type*)0 : __ptr.operator->(); }
 #endif
     };
 
-- 
2.46.2

Reply via email to