exception.h File Reference
`#include <wibble/test.h>`
`#include <exception>`
`#include <typeinfo>`
`#include <string>`
`#include <sstream>`
`#include <iterator>`
`#include <vector>`
Include dependency graph for exception.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Classes

class | wibble::exception::InstallUnexpected
| Install an unexpected handler for the duration of its scope. More...
struct | wibble::exception::AddContext
class | wibble::exception::Context
| Store context information for an exception. More...
class | wibble::exception::Generic
| Base class for all exceptions. More...
class | wibble::exception::Interrupted
| Exception thrown when some long event is interrupted by an external event (like a system call being interrupted by a signal) More...
class | wibble::exception::WaitInterrupted
| Exception thrown when some system wait is interrupted by a signal. More...
class | wibble::exception::Consistency
| Exception thrown when some consistency check fails. More...
struct | wibble::exception::BadCast
struct | wibble::exception::BadCastExt< From, To >
class | wibble::exception::OutOfRange
| Exception thrown when some value is out of range. More...
class | wibble::exception::ValOutOfRange< C >
| Exception thrown when index checking fails. More...
class | wibble::exception::System
| Base class for system exceptions. More...
class | wibble::exception::File
| Base class for exceptions for file I/O. More...

## Namespaces

| wibble
| wibble::exception

## Functions

void | wibble::exception::DefaultUnexpected ()
| Basic unexpected handler. More...

## Detailed Description

This file provides the root of the exception hierarchy. The goal of this hierarchy is to provide the most possible information on what caused the exception at the least possible cost for the programmer.

Every exception is the descendent of Exception that, in turn, extends the std::exception class of the STL.

Further descendents of Exception add functionality and automatisms to error message generation:

- ContextException extends Exception to provide informations on the context in which the exception was raised
- ConsistencyCheckException extends ContextException to be a base class for all exception raised on failure of a consistency check; IndexOutOfRangeException is one example of such exceptions, to be used when checking that a value (such as an index) fails betweed two given bounds.
- SystemException extends ContextException to carry informations about error conditions reported by external services, like the Operating System, a database interface or an interface used to communicate to some network server. In particular, it provides the logic needed to make use of the error descriptions provided by the external services, as strerror(3) does for the operating system's error conditions. FileException is an example of such exceptions, to be used to report error conditions happened during File I/O.

Example exception raising:

void MyFile::open(const char* fname) throw (FileException)
{
if ((fd = open(fname, O_RDONLY)) == -1)
throw FileException(errno, stringf::fmt("opening %s read-only", fname));
}
wibble::str::fmt
std::string fmt(const char *f,...)
Definition: string.cpp:123

Example exception catching:

try {
myfile.open("/tmp/foo");
} catch (FileException& e) {
fprintf(stderr, "%.*s: aborting.\n", PFSTR(e.toString()));
exit(1);
}