title: C++11 interface pure virtual destructor
body: <p><strong>UPD</strong>. There is a mark that it is a duplicate of <a href="https://stackoverflow.com/questions/11494422/default-pure-virtual-destructor">this question</a>. But in that question OP asks HOW to use <code>default</code> to define pure virtual destructor. This question is about <em>what the difference</em>.</p>
  
  <p>In C++ (latest standard if possible) what the <strong>real</strong> difference between defining pure virtual destructor with empty body implementation and just a empty body (or default)?</p>
  
  <p>Variant 1:</p>
  
  <pre><code>class I1 {
  public:
      virtual ~I1() {}
  };
  </code></pre>
  
  <p>Variant 2.1:</p>
  
  <pre><code>class I21 {
  public:
      virtual ~I21() = 0;
  };
  
  I21::~I21() {}
  </code></pre>
  
  <p>Variant 2.2:</p>
  
  <pre><code>class I22 {
  public:
      virtual ~I22() = 0;
  };
  
  I22::~I22() = default;
  </code></pre>
  
  <p><strong>Update</strong> I found at least 1 difference between Variant 1 and Variants 2.1/2.2:</p>
  
  <p><code>std::is_abstract::value</code> is <code>false</code> for Variant 1, and <code>true</code> for Variants 2.1 and 2.2.</p>
  
  <p><a href="http://ideone.com/HL7OKe" rel="noreferrer"><kbd><strong>Demo</strong></kbd></a></p>
  
  <p>May be someone can found difference between 2.1 and 2.2?</p>