А именно, допустим есть некоторый тип «Activity<Item, Impl = …>» с автоматическим преобразованием в «Activity<Item>», то есть, когда Impl становится неким стандартным. Теперь я хочу создать концепт «template<typename From, To> concept ActivityLike = std::convertible_to<From, Activity<To>>». Далее, есть куча функций вида «template<typename MapItem, typename MapFn> auto map(MapFn&&)», где автоматически выводится тип результата. Там получается что-то типа «Activiity<MapItem, SomeComplexImpl>». Вот, и я хочу в сигнатуре функции явно сказать, что некий выводимый тип результата Res удовлетворяет концепту «ActivityLike<Res, MapItem>». Все было бы просто, если бы в коде можно было бы явно ссылаться на тип Res, но он выводится, и там стоит «auto». Если попытаться ввести Res явно, то ломается выводилка типов у GCC. Может, у кого есть идеи? Или просто укажите хорошее введение по концептам с погружением. Все утро перед работой голову ломал. Если что, это хобби в свободное время. Коллег так мучать не стал бы)
Как уже было сказано, обычно концепты используют для входных параметров
Единственным, как мне кажется, решением тут может быть кучка static_assert'ов, на вызов функции при разных шаблонных параметрах