@@ -645,22 +645,27 @@ H AbslHashValue(H hash_state, const std::shared_ptr<T>& ptr) {
645645//
646646// - `absl::Cord`
647647// - `std::string` (and std::basic_string<T, std::char_traits<T>, A> for
648- // any allocator A and any T in {char, wchar_t, char16_t, char32_t})
648+ // any allocator A and any T in {char, wchar_t, char8_t, char16_t,
649+ // char32_t})
649650// - `absl::string_view`, `std::string_view`, `std::wstring_view`,
650- // `std::u16string_view`, and `std::u32_string_view`.
651+ // `std::u8string_view`, `std:: u16string_view`, and `std::u32_string_view`.
651652//
652653// For simplicity, we currently support only strings built on `char`, `wchar_t`,
653- // `char16_t`, or `char32_t`. This support may be broadened, if necessary, but
654- // with some caution - this overload would misbehave in cases where the traits'
655- // `eq()` member isn't equivalent to `==` on the underlying character type.
654+ // `char8_t`, `char16_t`, or `char32_t`. This support may be broadened, if
655+ // necessary, but with some caution - this overload would misbehave in cases
656+ // where the traits' `eq()` member isn't equivalent to `==` on the underlying
657+ // character type.
656658template <typename H>
657659H AbslHashValue (H hash_state, absl::string_view str) {
658660 return H::combine_contiguous (std::move (hash_state), str.data (), str.size ());
659661}
660662
661- // Support std::wstring, std::u16string and std::u32string.
663+ // Support std::wstring, std::u8string, std:: u16string and std::u32string.
662664template <typename Char, typename Alloc, typename H,
663665 typename = std::enable_if_t <std::is_same_v<Char, wchar_t > ||
666+ #ifdef __cpp_char8_t
667+ std::is_same_v<Char, char8_t > ||
668+ #endif
664669 std::is_same_v<Char, char16_t > ||
665670 std::is_same_v<Char, char32_t >>>
666671H AbslHashValue (
@@ -669,9 +674,13 @@ H AbslHashValue(
669674 return H::combine_contiguous (std::move (hash_state), str.data (), str.size ());
670675}
671676
672- // Support std::wstring_view, std::u16string_view and std::u32string_view.
677+ // Support std::wstring_view, std::u8string_view, std::u16string_view and
678+ // std::u32string_view.
673679template <typename Char, typename H,
674680 typename = std::enable_if_t <std::is_same_v<Char, wchar_t > ||
681+ #ifdef __cpp_char8_t
682+ std::is_same_v<Char, char8_t > ||
683+ #endif
675684 std::is_same_v<Char, char16_t > ||
676685 std::is_same_v<Char, char32_t >>>
677686H AbslHashValue (H hash_state, std::basic_string_view<Char> str) {
0 commit comments