C++0x コンセプトの階層化(Concept Refinements)

コンセプトは、階層構造にすることができます。
たとえば、イテレータは階層構造を持っていますが、コンセプトではそれを直接表現することができます。

concept InputIterator<class X> {}
concept ForwardIterator<class X>       : InputIterator<X> {}
concept BidirectionalIterator<class X> : ForwardIterator<X> {}
concept RandomAccessIterator<class X>  : BidirectionalIterator<X> {}

これは、"コンセプトの継承"と見なすことができます。


Concept Refinementは関連要件(Associated Requirements)と違い、
concept mapに対しても影響を与えます。


Concept Refinementと関連要件(Associated Requirements)は、
継承と包含の関係と同様に"is-a"関係と"has-a"関係を表します。
階層構造が必要な場合にはConcept Refinementを使用します。