
"Beman Dawes" <bdawes@acm.org> skrev i meddelandet news:e80sim$5ng$1@sea.gmane.org...
<Oliver.Kowalke@qimonda.com> wrote in message news:5D4F031442F5CB489CF88277DDBACCDD054D060B@drsse401.eu.infineon.com...
Hi, shouldn't system_error::const char * what() const contain throw ()?
Good question. I don't know the answer. The standard (for std::exception, which is the eventual base class) says:
virtual const char* what() const throw();
system_error::what catches exceptions, so it never throws.
I afraid I still don't know the rule as to when you need to provide a throw() specifier rather than just documenting that a function never throws.
Is there guidance from exception experts?
I'm not one of those, but have notice that several compilers (MSVC7.1, Comeau) complain about virtual functions having a less strict throw spec than the base class functions they override. Seems to me like there would be a *real* surprise if catch (const std::exception& e) { e->what(); } actually threw another exception, even if e is a derived exception class. Bo Persson