title: VS2012 complains when using +[]{} sorcery
body: <p>I want automatic deduction of the arguments of a templated function which accepts a function, while using lambdas. This Example shows some of my options:</p>
  
  <pre><code>template &lt;class T&gt;
  void foo(void (*func)(T)) {
      T val;
      // do something with val and func...
  }
  
  int main() {
      auto pfunc0         =  [] (int) { /*...*/ };
      void (*pfunc1)(int) =  [] (int) { /*...*/ };
      auto* pfunc2        = +[] (int) { /*...*/ };
  
      foo(pfunc0);      // not ok
      foo&lt;int&gt;(pfunc0); // ok, but redundant
      foo(pfunc1);      // ok, but redundant
      foo(pfunc2);      // ok
  }
  </code></pre>
  
  <p>pfunc2 uses a trick I learned here: <a href="https://stackoverflow.com/q/37709874/5460583">Obtaining function pointer to lambda?</a>. So actually I should be happy with the pfunc2 case as it is concise and non repeating code, unfortunately the Visual C++ 2012 IDE complains it was erroneous code even though it compiles just fine. </p>
  
  <p>Are there any workarounds or recommendations for this problem?</p>
  
  <p><strong>IDE error messages:</strong></p>
  
  <p>In the "auto* pfunc2" line: The IDE underlines 'auto' and says </p>
  
  <blockquote>
  <pre><code>Error: cannot deduce 'auto' type
  </code></pre>
  </blockquote>
  
  <p>also it underlines '[' where it complains</p>
  
  <blockquote>
  <pre><code>Error: more than one conversion function from "lambda[]void (int)-&gt;void" to a build-in type applies:
  function "lambda[]void (int)-&gt;void::operator void (*)(int)() const"  
  function "lambda[]void (int)-&gt;void::operator void (*)(int)() const"  
  function "lambda[]void (int)-&gt;void::operator void (*)(int)() const"
  </code></pre>
  </blockquote>