|
|
Defined in header <string_view> | ||
(1) | ||
template<class CharT,class Traits> constexprbool operator==(std::basic_string_view<CharT,Traits> lhs, | (since C++17) (until C++20) | |
template<class CharT,class Traits> constexprbool operator==( | (since C++20) | |
template<class CharT,class Traits> constexprbool operator!=(std::basic_string_view<CharT,Traits> lhs, | (2) | (since C++17) (until C++20) |
template<class CharT,class Traits> constexprbool operator<(std::basic_string_view<CharT,Traits> lhs, | (3) | (since C++17) (until C++20) |
template<class CharT,class Traits> constexprbool operator<=(std::basic_string_view<CharT,Traits> lhs, | (4) | (since C++17) (until C++20) |
template<class CharT,class Traits> constexprbool operator>(std::basic_string_view<CharT,Traits> lhs, | (5) | (since C++17) (until C++20) |
template<class CharT,class Traits> constexprbool operator>=(std::basic_string_view<CharT,Traits> lhs, | (6) | (since C++17) (until C++20) |
template<class CharT,class Traits> constexpr/*comp-cat*/ operator<=>( | (7) | (since C++20) |
Compares two views.
All comparisons are done via thecompare() member function (which itself is defined in terms ofTraits::compare()
):
The implementation provides sufficient additional | (until C++20) |
The return type of three-way comparison operators (/*comp-cat*/) isTraits::comparison_category if that qualified-id denotes a type,std::weak_ordering otherwise. If/*comp-cat*/ is not a comparison category type, the program is ill-formed. The | (since C++20) |
Contents |
lhs, rhs | - | views to compare |
Linear in the size of the views.
Sufficient additional overloads can be implemented through non-deduced context in one parameter type. | (until C++20) |
Three-way comparison result type ofstd::string_view,std::wstring_view,std::u8string_view,std::u16string_view andstd::u32string_view isstd::strong_ordering. std::type_identity_t is used for non-deduced context, which makes arguments that implicitly convertible to the string view type comparable with the string view. | (since C++20) |
#include <string_view> int main(){usingnamespace std::literals; static_assert(""sv==""sv); static_assert(""sv=="","Selects an additional overload until C++20."); static_assert(""==""sv,"Selects an additional overload until C++20.""Uses a rewritten candidate since C++20."); static_assert(!(""sv!=""sv),"Uses the rewritten candidate since C++20."); static_assert(!(""sv!=""),"Selects an additional overload until C++20;""Uses a rewritten candidate since C++20."); static_assert(!(""!=""sv),"Selects an additional overload until C++20.""Uses a rewritten candidate since C++20.");}
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3432 | C++20 | the return type ofoperator<=> was not required to be a comparison category type | required |
LWG 3950 | C++20 | redundant additional overloads were still required | overload sets reduced |