title: Correct use of `= delete` for methods in classes
body: <p>Is the following snipplet correct for un-defining all otherwise generated methods and constructors for a class?</p>
  
  <pre><code>struct Picture {
  
    // 'explicit': no accidental cast from string to Picture
    explicit Picture(const string &amp;filename) { /* load image from file */ }
  
    // no accidental construction, i.e. temporaries and the like
    Picture() = delete;
  
    // no copy
    Picture(const Picture&amp;) = delete;
  
    // no assign
    Picture&amp; operator=(const Picture&amp;) = delete;
  
    // no move
    Picture(Picture&amp;&amp;) = delete;
  
    // no move-assign
    Picture&amp; operator=(Picture&amp;&amp;) = delete; // return type correct?
  };
  </code></pre>
  
  <p>This deletes every default compiler implementation and only leaves the destructor, right? Without it the class would be (almost) unusable I guess, but I could delete it as well, correct?</p>
  
  <p>Is the return type <code>Picture&amp;</code> of the move-assign <code>operator=(Picture&amp;&amp;)</code> correct? Does it make a difference if I wrote <code>Picture&amp;&amp;</code> for the return type?</p>