Concepts provide us a common interface for structs, classes,
interfaces, even arrays.
Concepts can be practically extended.
Concepts can be used for template specialization and as compile
time constraints and as a static interface.
Also we can use concepts as traits like that:
static if (is(T : Concept)) { }
instead of
static if (satisfiesConcept!T) { }