Variadic 函数包装器无法使用 MSVC2017 进行编译

Variadic functional wrapper doesn't compile with MSVC2017

我正在尝试使用 VS2017 编译以下内容:

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。我做错了什么?

你应该 template <typename> struct Logger3; 在你的专业化之前。