C++標準では「概念」は定義されていません。
EqualityComparable, LessThanComparable, DefaultConstructible,
MoveConstructible, CopyConstructible, MoveAssignable, CopyAssignable,
Destructible, NullablePointer, Hash, TrivialClock, Allocator,
Swappable or Container
しかし、いくつかの要件は他のものとは異なる構文を使用します。タイプ(EqualityComparable
)と定数、規格に記載されているように、例えば、allocator
とswappable
は、私のサンプルリストからキャメルケースの固定幅フォントの小文字のイタリック体(アロケータ)、等を使用するか、または。
PODType
のような他の「概念」は、丁度定義として標準で扱われます。
たとえば、BinaryPredicate
は概念または定義として定義されていません。
void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);
影響:すべてが、対象の範囲[first + 1,last)
でイテレータi
によって 呼ば等しい要素のすべての連続するグループからの最初の要素を消去しそれを使用して関数のテンプレート名として*i == *(i-1)
( 引数のないバージョンの場合)またはpred(*i, *(i - 1))
(述語引数を持つバージョンの場合)が保持されます。 のイテレータと消去された要素への参照のみを無効にします。
例外:等価比較または述語によって例外がスローされない限り、何もありません。
複雑:範囲[first,last)
が空でない場合、正確 対応する述語の(last - first) - 1
アプリケーション、述語のそうでなければアプリケーション。
ご覧のとおり、BinaryPredicate
は定義されていません。 std::unique
の動作にどのように影響するかを示しています。
一方、cppreferenceコンセプトリストは、の概念である非標準である提案から抽出されます。さらに、cppreference
は完璧ではなく、すべてのwikiページがコンセプトプロポーザルの観点から完全ではなく、UnaryOperator
のように標準で表示されないテンプレートパラメータもあります。
cppreferenceにはその一部が記載されており、他には記載されていません。私はあなたがそれを思っていると思う。 –
'UnaryPredicate'は、少なくとも、Predicateの同義語のように思えます。 – StoryTeller
'BinaryPredicate'は、実際のC++標準で使用され、定義されている用語/型名です(see section 25.1、[this draft](http://www.open-std.org/jtc1/sc22/wg21/) docs/papers/2013/n3690.pdf))。しかし、「UnaryPredicate」と「UnaryFunction」という用語は、標準では決して出現しません。 'BinaryOperation'と' UnaryOperation'は標準で使われていますが、 'BinaryPredicate'とほぼ同じように定義されていません。 – Cornstalks