title: Empty destructor vs literal destructor
body: <p>Consider the following code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  class Test
  {
      public:
          constexpr Test(const int x) : _x(x) {}
          constexpr int get() const {return _x;}
          ~Test() {} // HERE
      protected:
          const int _x;
  };
  
  int main()
  {
      static constexpr Test test(5);
      return 0;
  }
  </code></pre>
  
  <p>If I remove the line <code>HERE</code> the code compiles well, but if I define an empty destructor, it results to a compilation error saying that <code>Test</code> is non-literal. </p>
  
  <p>Why and what is the difference between an empty destructor and no destructor at all ?</p>
  
  <p>EDIT: Another related question : if empty and literal destructors are different how to define a protected literal destructor ?</p>