libstdc++: Use std::type_identity_t in <string_view> as per LWG 3950 [PR114400]

The difference between __type_identity_t and std::type_identity_t is
observable, as demonstrated in the PR. Nobody in LWG seems to think this
an example we should really care about, but it seems easy and harmless
to change this.

libstdc++-v3/ChangeLog:

	PR libstdc++/114400
	* include/std/string_view (operator==): Use std::type_identity_t
	in C++20 instead of our own __type_identity_t.
This commit is contained in:
Jonathan Wakely
2024-03-23 11:07:57 +00:00
parent 4a46a48ebc
commit f4605c53ea
+10 -2
View File
@@ -602,15 +602,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// deduction and the other argument gets implicitly converted to the deduced
// type (see N3766).
#if __cpp_lib_three_way_comparison
template<typename _CharT, typename _Traits>
[[nodiscard]]
constexpr bool
operator==(basic_string_view<_CharT, _Traits> __x,
__type_identity_t<basic_string_view<_CharT, _Traits>> __y)
type_identity_t<basic_string_view<_CharT, _Traits>> __y)
noexcept
{ return __x.size() == __y.size() && __x.compare(__y) == 0; }
#if __cpp_lib_three_way_comparison
template<typename _CharT, typename _Traits>
[[nodiscard]]
constexpr auto
@@ -620,6 +620,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
-> decltype(__detail::__char_traits_cmp_cat<_Traits>(0))
{ return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); }
#else
template<typename _CharT, typename _Traits>
[[nodiscard]]
constexpr bool
operator==(basic_string_view<_CharT, _Traits> __x,
__type_identity_t<basic_string_view<_CharT, _Traits>> __y)
noexcept
{ return __x.size() == __y.size() && __x.compare(__y) == 0; }
template<typename _CharT, typename _Traits>
[[nodiscard]]
constexpr bool