Проблема рекурсии CTAD для оболочек функций с указателем обертки в качестве аргумента функции
У меня есть шаблонная оболочка функции с типом шаблона, равным типу возврата функции. Кроме того, первым аргументом функции является указатель на саму оболочку.
template<typename R>
struct wrapper_t{
using result_t = R;
template<typename F, typename ...Ts>
wrapper_t(F &&, Ts &&...){
}
};
int foo(wrapper_t<int>*,double){
return 2;
}
Я пытаюсь использовать здесь определяемые пользователем руководства по дедукции, чтобы не указывать тип шаблона, чтобы я мог использовать его как
wrapper_t wrapper(foo,1.0);
Но я не знаю, чем заменить вопросительные знаки в следующем руководстве из-за рекурсии.
template<typename F, typename ...Ts>
wrapper_t(F &&, Ts &&...)->wrapper_t<std::invoke_result_t<F,/*???*/,Ts...>>;
Можно ли здесь использовать ctad, если да, то как?