template <typename R, typename ...Args>
struct Logger3<R(Args...)>
{
std::function<R(Args...)> func;
string name;
Logger3(std::function<R(Args...)> func, const string& name)
: func{func}, name{name}
{
}
R operator() (Args ...args)
{
cout << "Entering " << name << endl;
R result = func(args...);
cout << "Exiting " << name << endl;
return result;
}
};
double add(double a, double b)
{
cout << a << " + " << b << " = " << (a+b) << endl;
return a+b;
}
template <typename R, typename... Args>
auto make_logger3(R (*func)(Args...), const string& name)
{
return Logger3<R(Args...)>(
std::function<R(Args...)>(func),
name
);
};
error C2988: unrecognizable template declaration/definition