https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102048

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:2cd229dec8d6716938de5052479d059d306969da

commit r12-3146-g2cd229dec8d6716938de5052479d059d306969da
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Aug 25 16:42:49 2021 +0100

    libstdc++: Remove __gnu_cxx::rope::erase(size_type) [PR102048]

    This function claims to remove a single character at index p, but it
    actually removes p+1 characters beginning at p. So r.erase(0) removes
    the first character, but r.erase(1) removes the second and third, and
    r.erase(2) removes the second, third and fourth. This is not a useful
    API.

    The overload is present in the SGI STL <stl_rope.h> header that we
    imported, but it isn't documented in the API reference. The erase
    overloads that are documented are:

    erase(const iterator& p)
    erase(const iterator& f, const iterator& l)
    erase(size_type i, size_type n);

    Having an erase(size_type p) overload that erases a single character (as
    the comment says it does) might be useful, but would be inconsistent
    with std::basic_string::erase(size_type p = 0, size_type n = npos),
    which erases from p to the end of the string when called with a single
    argument.

    Since the function isn't part of the documented API, doesn't do what it
    claims to do (or anything useful) and "fixing" it would leave it
    inconsistent with basic_string, I'm just removing that overload.

    libstdc++-v3/ChangeLog:

            PR libstdc++/102048
            * include/ext/rope (rope::erase(size_type)): Remove broken
            function.

Reply via email to