Код: Выделить всё
template
struct Base { ... };
struct Derived1 : Base { ... };
struct Derived2 : Base { ... };
Код: Выделить всё
template
concept FromBase = requires ...
Код: Выделить всё
void foo(FromBase auto param); // accepts anything derived from `Base`
void foo(FromBase auto param); // accepts `Derived1` and `Derived2`
void foo(FromBase auto param); // accepts `Derived1`, but not `Derived2`
Как бы я это сделал с понятиями? Или это вообще возможно с C++? Обратите внимание, что я специально ищу решение, которое «легко для глаз и ума», т. е. в идеале я не хочу использовать N различных концепций для поддержки N потенциальных параметров.
Бонусный вопрос: возможно ли это также со смешанными параметрами шаблона типа/не типа в Base?
EDIT: Разъяснено, что концепции должны принимать участие в разрешении перегрузки, от более общего к более конкретному.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ally-known