у меня есть умный указатель, в данном вопросе назовем его
smart_pointer
он шаблонен по
template
у меня есть
std::is_function_v для проверки, является ли
Т функцией (но я думаю что класса
return_type будет достаточно, он описан ниже)
я хотел воспользоваться
SFINAE для того чтобы выключить перегрузку
в итоге наклепал такой код:
template<typename T>
struct return_type;
template<typename R, typename... Args>
struct return_type<R(Args...)>
{
using type = R;
};
//-------------------
template<typename R = return_type<T>::type, typename ...Args>
R operator()(Args... args) const {
return (*reference->instance)(args...);
}
объявил функцию как
typedef bool (*function)(short_args&&);
и я не могу взять и сделать так:
smart_pointer<function> sm(foo);
sm(short_args())
потому что возникает ошибка error C3889
в чем ошибка?