title: C5027 "Move assignment operator was implicitly defined as deleted"
body: <p>I have this code:</p>
  
  <pre><code>template &lt; typename TFunc &gt;
  class Foo
  {
  public:
    Foo(TFunc func) : func_(func) {}
    Foo(Foo&lt;TFunc&gt; const &amp;) = delete;
    Foo&lt;TFunc&gt; &amp; operator=(Foo&lt;TFunc&gt; const &amp;) = delete;
    Foo(Foo&lt;TFunc&gt; &amp;&amp;) = default;
    Foo&lt;TFunc&gt; &amp; operator=(Foo&lt;TFunc&gt; &amp;&amp;) = default;
  private:
    TFunc func_;
  };
  
  int main()
  {
    auto func = []() {};
    auto f = Foo&lt;decltype(func)&gt;(func);
    return 0;
  }
  </code></pre>
  
  <p>When I compile this code with Visual Studio 2015 with the <code>/Wall</code>flag, I get the following warning:</p>
  
  <pre><code>C5027 'Foo&lt;main::&lt;lambda_e5404f82e4b38ca1d164ce09039df46c&gt;&gt;': move assignment operator was implicitly defined as deleted
  </code></pre>
  
  <p>I don't understand why the move assignment operator would be implicitly defined as deleted while it is explicitely defined as defaulted. Any idea?</p>