In generic programming, a concept is a description of supported operations on a type, including syntax and semantics. In this way, concepts are related to abstract base classes but concepts do not require a subtype relationship. The term was in use as early as 1998.
For example, if a type
I satisfies the Trivial Iterator concept in C++, and
i is of type
I, the following are valid expressions with corresponding semantics:
I idefault construction.
*imust be convertible to some type
i->mis valid if