title: How is "=default" different from "{}" for default constructor and destructor?
body: <p>I originally posted this as a question only about destructors, but now I'm adding consideration of the default constructor.  Here's the original question:</p>
  
  <blockquote>
    <p>If I want to give my class a destructor that is virtual, but is
    otherwise the same as what the compiler would generate, I can use <code>=default</code>:</p>
  
  <pre><code>class Widget {
  public:
     virtual ~Widget() = default;
  };
  </code></pre>
    
    <p>But it seems that I can get the same effect with less typing using an
    empty definition:</p>
  
  <pre><code>class Widget {
  public:
     virtual ~Widget() {}
  };
  </code></pre>
    
    <p>Is there any way in which these two definitions behave differently?</p>
  </blockquote>
  
  <p>Based on the replies posted for this question, the situation for the default constructor seems similar.  Given that there is almost no difference in meaning between "<code>=default</code>" and "<code>{}</code>" for destructors, is there similarly almost no difference in meaning between these options for default constructors?  That is, assuming I want to create a type where the objects of that type will be both created and destroyed, why would I want to say</p>
  
  <pre><code>Widget() = default;
  </code></pre>
  
  <p>instead of</p>
  
  <pre><code>Widget() {}
  </code></pre>
  
  <p>?</p>
  
  <p>I apologize if extending this question after its original posting is violating some SO rules.  Posting an almost-identical question for default constructors struck me as the less desirable option.</p>