最終更新日時(UTC):
が更新

履歴 編集

concept
<tuple>

std::pair-like(C++20)

namespace std {
  namespace ranges {
    // C++20
    template<class T>
    concept pair-like = // 説明専用コンセプト
      !is_reference_v<T> && requires(T t) {
        typename tuple_size<T>::type; // tuple_size<T> が完全型であることを明確にする
        requires derived_from<tuple_size<T>, integral_constant<size_t, 2>>;
        typename tuple_element_t<0, remove_const_t<T>>;
        typename tuple_element_t<1, remove_const_t<T>>;
        { get<0>(t) } -> convertible_to<const tuple_element_t<0, T>&>;
        { get<1>(t) } -> convertible_to<const tuple_element_t<1, T>&>;
      };
  }

  // C++23 以降
  template <typename T>
  concept pair-like // 説明専用コンセプト
    = tuple-like<T> && tuple_size_v<remove_cvref_t<T>> == 2;
}

概要

pair-likeは型Tpairのような型であることを表現する説明専用コンセプトである。C++23 ではtuple-likeの追加に伴って定義が変更された。

ranges::subrangeでのoperator PairLikeの定義など、<ranges>での定義に使用されている。

C++23 以降ではarraypairtupleranges::subrangeらの互換性を高める(相互に構築・比較などが出来るようにする)ためにも使用される。

バージョン

言語

  • C++20

処理系

関連項目

参照