If you have classes
B is a derived class of
A, that is a noun property.
B has a fundamental relationship to
A which the very definition of
B must explicitly claim.
Concepts don't work like that.
First and most obviously, C++ concepts don't have to involve just one type. A concept can describe the relationship between types. A type can be
indirect_strict_weak_order requires a type that could be ordered, a comparison functor that defines the ordering, and a projection function that modifies the elements before applying the comparison functor.
Second, even single-type concepts are entirely separate from the type definition itself. It is not part of the definition of a type
A that it satisfies some concept. That may be the effect of
A's definition, but it is not an intrinsic property of
A the way a base class is. Instead, it is a property of what happens when you take
A and check it against the concept.
Indeed, types can satisfy concepts accidentally. The author of the type may not have even been aware the concept existed when the type was written. Yet it still satisfies it.
As such, the relationship between a type and any concepts it satisfies is inherently active. This is not a noun property; it's a verbal property.
So a set of template arguments given to a concept are said to "satisfy" the concept if applying those arguments causes the concept to yield
However, the C++ standard library also recognizes that a concept can have requirements which cannot be enforced by code. These semantic requirements also need to be fulfilled, and there's no way for code to verify this. A set of template arguments which fulfills those semantic requirements are said to "model" the concept.