Существует большая разница между ООП и общим программированием, Предопределение .
В ООП, когда вы разрабатываете класс, у вас были интерфейсы, которые, как вы думаете, будут полезны. И это сделано.
В универсальном программировании, с другой стороны, если класс соответствует заданному набору требований (главным образом, методов, но также внутренних констант или типов), тогда он соответствует требованиям и может используемый. Идея концепции заключается в формализации этого, чтобы обнаружение могло происходить непосредственно при проверке сигнатуры метода, а не при создании экземпляра тела метода. Это также облегчает проверку шаблонных методов, поскольку некоторые методы могут быть отклонены без какой-либо реализации, если концепции не совпадают.
Преимущество Концепций состоит в том, что вы не страдаете от Предопределения, вы можете выбрать класс из Библиотеки1, выбрать метод из Библиотеки2, и если он подходит, вы - золото (если это не так, вы можете использовать концептуальную карту). В OO вы должны каждый раз писать полноценный адаптер.
Вы правы, что оба кажутся похожими. Разница в основном заключается во времени привязки (и в том, что у Concept все еще статическая диспетчеризация вместо динамической диспетчеризации, как с интерфейсами). Концепции более открыты, поэтому их проще использовать.