名前空間
変種
操作

std::experimental::ranges::Boolean

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
コンセプトライブラリ
中核言語のコンセプト
                              
オブジェクトのコンセプト
                              
                              
比較のコンセプト
Boolean

呼び出し可能オブジェクトのコンセプト
                                        
                              
URNGコンセプト
 
template< class B >

concept bool Boolean =
    Movable<std::decay_t<B>> &&
    requires(const std::remove_reference_t<B>& b1,
             const std::remove_reference_t<B>& b2, const bool a) {
        { b1 }       -> ConvertibleTo<bool>&&;
        { !b1 }      -> ConvertibleTo<bool>&&;
        { b1 && a }  -> Same<bool>&&;
        { b1 || a }  -> Same<bool>&&;
        { b1 && b2 } -> Same<bool>&&;
        { a && b2  } -> Same<bool>&&;
        { b1 || b2 } -> Same<bool>&&;
        { a || b2  } -> Same<bool>&&;
        { b1 == b2 } -> ConvertibleTo<bool>&&;
        { b1 == a  } -> ConvertibleTo<bool>&&;
        { a == b2  } -> ConvertibleTo<bool>&&;
        { b1 != b2 } -> ConvertibleTo<bool>&&;
        { b1 != a  } -> ConvertibleTo<bool>&&;
        { a != b2  } -> ConvertibleTo<bool>&&;

    };
(ranges TS)

コンセプトBoolean<B>は、ブールコンテキストで使用可能な型の要件を指定します。Booleanが満たされるためには、論理演算子(短絡評価を含む)が通常の動作をする必要があります。より正確には、以下が与えられた場合:

Boolean<B>は、以下の場合にのみ満たされます。

  • bool(b1) == !bool(!b1);
  • b1 && b2b1 && bool(b2)bool(b1) && b2 はすべて bool(b1) && bool(b2) と等しく、同じ短絡評価を持ちます。
  • b1 || b2b1 || bool(b2)bool(b1) || b2 はすべて bool(b1) || bool(b2) と等しく、同じ短絡評価を持ちます。
  • bool(b1 == b2)bool(b1 == bool(b2))bool(bool(b1) == b2) はすべて (bool(b1) == bool(b2)) と等しくなります。
  • bool(b1 != b2)bool(b1 != bool(b2))bool(bool(b1) != b2) はすべて (bool(b1) != bool(b2)) と等しくなります。

[編集] 等価性保持

式が**等価性保持**であるとは、等しい入力に対して等しい出力を生成することを意味します。

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

等価性保持が要求されるすべての式は、さらに**安定**である必要があります。同じ入力オブジェクトでそのような式の2回の評価は、これらの入力オブジェクトの明示的な介入的な変更がない限り、等しい出力を持ちます。

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

[編集] 暗黙的な式バリエーション

ある定数左辺値オペランドに対して非変更的な式を使用する requires-expression は、明示的に異なる意味で要求されていない限り、そのオペランドに対して非定数左辺値または(定数であるか否かにかかわらず)右辺値を受け入れる、その式の追加のバリエーションも暗黙的に要求します。これらの 暗黙的な式バリエーション は、宣言された式の意味要件と同じ要件を満たさなければなりません。実装がこれらのバリエーションの構文をどの程度検証するかは未規定です。

[編集] Notes

Boolean型の例としては、boolstd::true_typestd::bitset<N>::referenceがあります。ポインタはBoolean型ではありません。

{ expression } -> Same<T>&& の形式の推論制約は、実質的にdecltype((expression))&&T&& とまったく同じ型であることを要求します。これは、式の型と値カテゴリの両方を制限します。

English 日本語 中文(简体) 中文(繁體)