名前空間
変種
操作

std::common_with

From 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_reference_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 によって計算される)共通型 を共有し、両方がその型に変換可能であることを指定します。

目次

[編集] 意味論的要件

T と U が std::common_with<T, U> をモデル化するのは、等価性を保持するt1, t2, u1, u2 が存在し、decltype((t1)) および decltype((t2)) が両方とも T であり、decltype((u1)) および decltype((u2)) が両方とも U である場合、

言い換えると、共通型への変換は 等価性を保持しなければなりません。

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[編集] 参考文献

  • C++23標準 (ISO/IEC 14882:2024)
  • 18.4.6 Concept common_with [concept.common]
  • C++20 standard (ISO/IEC 14882:2020)
  • 18.4.6 Concept common_with [concept.common]

[編集] 関連項目

型のグループの共通の型を決定する
(クラステンプレート) [編集]
型のグループの共通の参照型を決定する
(クラステンプレート) [編集]
2つの型が共通の参照型を共有することを規定する
(コンセプト) [編集]
English 日本語 中文(简体) 中文(繁體)