名前空間
変種
操作

std::common_with

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

concept common_with =
  std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>> &&
  requires {
    static_cast<std::common_type_t<T, U>>(std::declval<T>());
    static_cast<std::common_type_t<T, U>>(std::declval<U>());
  } &&
  std::common_reference_with<
    std::add_lvalue_reference_t<const T>,
    std::add_lvalue_reference_t<const U>> &&
  std::common_referene_with<
    std::add_lvalue_reference_t<std::common_type_t<T, U>>,
    std::common_reference_t<
      std::add_lvalue_reference_t<const T>,

      std::add_lvalue_reference_t<const U>>>;
(C++20以上)

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

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

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

[編集] 等しさの維持

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

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

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

[編集] 関連項目

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