The Right Approach to Exceptions

Alf P. Steinbach alf.p.steinbach+usenet at gmail.com
Sat Feb 18 18:04:35 PST 2012


On 19.02.2012 02:17, H. S. Teoh wrote:
>
> The basic problem with C++ exceptions is that it allows you to throw
> literally *anything*. Which is nice and generous, but not having a
> common root to all exceptions cripples the system, because there is no
> functionality that can be depended upon, like toString when what you
> want is an error message.

No, that is a misunderstanding (completely).

However, C++ exceptions do have many problems, including:

   * Until C++11, no support for propagating exceptions through
     non-exception-aware code (in particular, from C callbacks).

   * No support for wchar_t exception text, i.e. *nix-specific.

   * A nonsensical exception class hierarchy with e.g.
     std::logic_error and std::bad_exception.

   * No differentiation between recoverable (soft, failure) and
     unrecoverable (hard, error) exceptions, although some people have
     argued that in the latter case one is screwed anyway.

   * Involving std::string arguments, so that in low memory
     conditions throwing an exception can itself throw.

Especially the last point is pretty silly. :-)

And then when C++11 added support for propagating error codes, it was 
designed as *nix-specific (char-based messages only) and overly complex.

I haven't heard about anyone actually using that stuff.


> Furthermore, not having a properly designed skeletal hierarchy to
> inherit from also adds to the problem. With no existing standard
> hierarchy to serve as a reference point, library writers just invent
> their own systems, most of which don't interoperate properly with each
> other. And thus the mess that is the C++ exception hierarchy.
>
> I certainly hope D can do better than that.

Agreed.


Cheers,

- Alf


More information about the Digitalmars-d mailing list