title: Variadic functional wrapper doesn't compile with MSVC2017
body: <p>I'm attempting to compile the following with VS2017:</p>
  
  <pre><code>template &lt;typename R, typename ...Args&gt;
  struct Logger3&lt;R(Args...)&gt;
  {
    std::function&lt;R(Args...)&gt; func;
    string name;
  
    Logger3(std::function&lt;R(Args...)&gt; func, const string&amp; name)
      : func{func}, name{name}
    {
    }
  
    R operator() (Args ...args)
    {
      cout &lt;&lt; "Entering " &lt;&lt; name &lt;&lt; endl;
      R result = func(args...);
      cout &lt;&lt; "Exiting " &lt;&lt; name &lt;&lt; endl;
      return result;
    }
  };
  
  double add(double a, double b)
  {
    cout &lt;&lt; a &lt;&lt; " + " &lt;&lt; b &lt;&lt; " = " &lt;&lt; (a+b) &lt;&lt; endl;
    return a+b;
  }
  
  template &lt;typename R, typename... Args&gt;
  auto make_logger3(R (*func)(Args...), const string&amp; name)
  {
    return Logger3&lt;R(Args...)&gt;(
      std::function&lt;R(Args...)&gt;(func),
      name
    );
  };
  </code></pre>
  
  <p>and I'm getting <code>error C2988: unrecognizable template declaration/definition</code> on the very first line. What am I doing wrong?</p>