Проблема рекурсии 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, если да, то как?

0 ответов

Другие вопросы по тегам