名前空間
変種
操作

std::common_reference_with

提供: cppreference.com
< cpp‎ | concepts
ヘッダ <concepts> で定義
template < class T, class U >

concept common_reference_with =
  std::same_as<std::common_reference_t<T, U>, std::common_reference_t<U, T>> &&
  std::convertible_to<T, std::common_reference_t<T, U>> &&

  std::convertible_to<U, std::common_reference_t<T, U>>;
(C++20以上)

コンセプト common_reference_with<T, U> は2つの型 TU の両方が変換可能な共通の参照型 (std::common_reference_t によって計算されます) を共有することを指定します。

等しさを維持する式 t1t2u1 および u2 が与えられたとき、 decltype((t1))decltype((t2)) がどちらも T であり、 decltype((u1))decltype((u2)) がどちらも U であり、さらに以下の内容を持たす場合にのみ、 T および U は common_reference_with<T, U> をモデル化します。

  • t1t2 が等しい場合にのみ std::common_reference_t<T, U>(t1)std::common_reference_t<T, U>(t2) が等しい。
  • u1u2 が等しい場合にのみ std::common_reference_t<T, U>(u1)std::common_reference_t<T, U>(u2) が等しい。

別の言い方をすると、共通の参照型への変換は等しさを維持しなければなりません。

[編集] 等しさの維持

等しい入力を与えると等しい出力が得られる場合、その式は等しさを維持します。

  • 式への入力がその被演算子から構成される。
  • 式の出力がその結果およびその式によって変更されるすべての被演算子 (もしあれば) から構成される。

等しさを維持することが要求されるすべての式は、さらに安定であることも要求されます。 同じ入力オブジェクトを用いたそのような式の2回の評価は、間にそれらの入力オブジェクトの変更が明示的に挟まれなければ、等しい出力が得られなければなりません。

[編集] 関連項目

型のグループの共通の参照型を調べます
(クラステンプレート) [edit]
2つの型が共通の型を共有することを指定します
(コンセプト) [edit]
指定された型のグループの共通型を調べます
(クラステンプレート) [edit]