- string_view[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
namespace std {
template <class CharT, class Traits>
constexpr bool
operator==(basic_string_view<CharT, Traits> x,
basic_string_view<CharT, Traits> y) noexcept; // (1) C++17
template <class CharT, class Traits>
constexpr bool
operator==(basic_string_view<CharT, Traits> x,
type_identity_t<basic_string_view<CharT, Traits>> y) noexcept; // (1) C++26
}- type_identity_t[link /reference/type_traits/type_identity.md]
basic_string_viewオブジェクトの等値比較を行う。
return x.compare(y) == 0;- compare[link compare.md]
- この演算子により、以下の演算子が使用可能になる (C++20):
operator!=
- C++26では、第2引数が
type_identity_tで包まれて非推論文脈となる。これにより、basic_string_viewへ暗黙変換可能な型(basic_stringや文字列リテラルなど)と直接比較できるようになり、従来別途規定されていた追加の比較オーバーロードが不要になった。
#include <iostream>
#include <string_view>
int main()
{
std::string_view a = "aaa";
std::string_view b {"aaaBB", 3}; // 先頭3文字を参照
if (a == b) {
std::cout << "equal" << std::endl;
}
else {
std::cout << "not equal" << std::endl;
}
}equal
- C++17
- Clang: 4.0 [mark verified]
- GCC: 7.1 [mark verified]
- ICC: ??
- Visual C++: ??
- P1614R2 The Mothership has Landed
- C++20での三方比較演算子の追加と、関連する演算子の自動導出
- LWG Issue 3950.
std::basic_string_viewcomparison operators are overspecified- C++26で、比較演算子の第2引数が
type_identity_tで包まれ、追加の比較オーバーロードの規定が不要になった
- C++26で、比較演算子の第2引数が