Should we provide a destructor with no-throw specifier?
<pre><code>namespace QuantLib {

    //! Base error class
    class Error : public std::exception {
      public:
        /*! The explicit use of this constructor is not advised.
            Use the QL_FAIL macro instead.
        */
        Error(const std::string&amp; file,
              long line,
              const std::string&amp; functionName,
              const std::string&amp; message = "");
        /*! the automatically generated destructor would
            not have the throw specifier.
        */
        ~Error() throw() {}
        //! returns the error message.
        const char* what() const throw ();
      private:
        boost::shared_ptr&lt;std::string&gt; message_;
    };

}
</code></pre>

<p>As you see through the comment, the destructor of class <code>Error</code> explicitly provides an empty implementation with no-throw specifier.</p>

<p>Question> Is this necessary? Or is this a good practice comparing to let the compiler generate a implicit destructor?</p>
