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

--- Comment #1 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:b370ed0bf93ecf0ff51d29e7fc132c433b2aa1be

commit r13-1037-gb370ed0bf93ecf0ff51d29e7fc132c433b2aa1be
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu Jun 9 12:07:15 2022 +0100

    libstdc++: Make std::hash<basic_string<>> allocator-agnostic (LWG 3705)

    This new library issue was recently moved to Tentatively Ready by an LWG
    poll, so I'm making the change on trunk.

    As noted in PR libstc++/105907 the std::hash specializations for PMR
    strings were not treated as slow hashes by the unordered containers, so
    this change preserves that. The new specializations for custom
    allocators are also not treated as slow, for the same reason. For the
    versioned namespace (i.e. unstable ABI) we don't have to worry about
    that, so can enable hash code caching for all basic_string
    specializations.

    libstdc++-v3/ChangeLog:

            * include/bits/basic_string.h (__hash_str_base): New class
            template.
            (hash<basic_string<C, char_traits<C>, A>>): Define partial
            specialization for each of the standard character types.
            (hash<string>, hash<wstring>, hash<u8string>, hash<u16string>)
            (hash<u32string>): Remove explicit specializations.
            * include/std/string (__hash_string_base): Remove class
            template.
            (hash<pmr::string>, hash<pmr::wstring>, hash<pmr::u8string>)
            (hash<pmr::u16string>, hash<pmr::u32string>): Remove explicit
            specializations.
            * testsuite/21_strings/basic_string/hash/hash.cc: Test with
            custom allocators.
            * testsuite/21_strings/basic_string/hash/hash_char8_t.cc:
            Likewise.

Reply via email to