Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

From cppreference.net
ヘッダーで定義 <experimental/ranges/concepts>
template < class From, class To >

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(ranges TS)

ConvertibleTo < From, To > コンセプトは、 From で指定された型と値カテゴリの式が、型 To へ暗黙的および明示的に変換可能であり、かつ両方の変換形式が等価であることを規定します。

具体的には、 ConvertibleTo < From, To > は、以下の発明された関数 To test ( From ( & f ) ( ) ) { return f ( ) ; } と、型 From ( ) の関数 f が与えられたとき、式 f ( ) が等価性を保存する(後述)場合にのみ満たされます。

  • 以下のいずれかの条件を満たす場合:
    • To がオブジェクト型でもオブジェクトへの参照型でもない、または
    • static_cast < To > ( f ( ) ) test(f) と等しい、かつ
  • 以下のいずれかが真である:
    • From がオブジェクトへの参照型ではない、または
    • From が非const修飾型への右辺値参照であり、上記のいずれかの式の後で参照されるオブジェクトの結果状態が有効だが未指定である、または
    • f() によって参照されるオブジェクトが上記のいずれの式によっても変更されない。

ConvertibleTo < From, To > std:: is_convertible < From, To > :: value の間に包含関係が存在する必要はありません。

等価性保存

式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。

  • 式への入力は、そのオペランドで構成されます。
  • 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

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

特に断りのない限り、 requires式 で使用される各式は、等価性を保持し安定していることが要求され、式の評価は非定数オペランドのみを変更することができます。定数であるオペランドは変更してはなりません。

関連項目

型が他の型に変換可能かどうかをチェックする
(クラステンプレート)