title: Static assertion for a move constructor different from the copy constructor
body: <p>Imagine that I have a class <code>A</code> that is cheap to move and expensive to copy. It could look like</p>
  
  <pre><code>class A {
    public: 
      [...]
  
    private:
      HeavyClass m;
  };
  </code></pre>
  
  <p>For this class, I would like an static verification that the class 
  (1) is move constructible and
  (2) does not simply use the copy constructor for move construction,
  independently of whether the move constructor was explicitly declared or not.</p>
  
  <p>Is this possible?</p>
  
  <p>As to why I would like this, consider the following example: At first, the class generates the move constructor automatically and behaves as desired. Then, someone changes the class and adds a destructor, which causes the move constructor not to be implicitly generated and the copy constructor to be used instead.</p>
  
  <p>Therefore, a <code>static_assert</code> would be ideal, but it seems that none of <code>is_move_constructible</code> or <code>is_trivially_move_constructible</code> is helpful here.</p>
  
  <p>Also, I know that it is possible to have <code>A(A&amp;&amp;) = default;</code> for all such classes but a solution with a <code>static_assert</code> would be cleaner and allow for doing the check outside of the class definition (f.i. in other projects relying on this class).</p>
  
  <p><strong>EDIT</strong>:<br>
  I do not want to forbid copy construction, I would just like to make sure that the move constructor is not using it...</p>