最終更新日時:
が更新

履歴 編集

function
<memory>

std::pointer_tag_pair::operator<=>(C++29)

friend constexpr auto operator<=>(pointer_tag_pair lhs, pointer_tag_pair rhs)
  noexcept requires three_way_comparable<tag_type>; // (1) C++29

概要

pointer_tag_pairオブジェクトの三方比較を行う。ポインタ値を優先し、次にタグ値を比較する。

テンプレートパラメータ制約

効果

以下と等価である。

return pair(lhs.pointer(), lhs.tag()) <=> pair(rhs.pointer(), rhs.tag());

例外

投げない。

備考

  • 関係のないオブジェクトを指すポインタどうしの比較結果は未規定である
  • タグの比較に組み込みの<=>が使われる場合、実装は内部のビット表現を直接比較することが推奨される

#include <memory>
#include <iostream>

int main()
{
  int arr[2] = {1, 2};
  std::pointer_tag_pair<int*, 1> p{&arr[0], 0u};
  std::pointer_tag_pair<int*, 1> q{&arr[1], 0u};

  std::cout << std::boolalpha << (p < q) << std::endl;
}

出力

true

バージョン

言語

  • C++29

処理系

参照