Loading...
Searching...
No Matches
Exception handling
Common
Collaboration diagram for Exception handling:

## Files

file | exceptions.hh
| A few common exception classes.

## Classes

class | Dune::Exception
| Base class for Dune-Exceptions. More...
struct | Dune::ExceptionHook
| Base class to add a hook to the Dune::Exception. More...
class | Dune::ExceptionStream< E >
| Class for extending a Dune::Exception with a stream interface. More...
class | Dune::IOError
| Default exception class for I/O errors. More...
class | Dune::MathError
| Default exception class for mathematical errors. More...
class | Dune::RangeError
| Default exception class for range errors. More...
class | Dune::NotImplemented
| Default exception for dummy implementations. More...
class | Dune::SystemError
| Default exception class for OS errors. More...
class | Dune::OutOfMemoryError
| Default exception if memory allocation fails. More...
class | Dune::InvalidStateException
| Default exception if a function was called while the object is not in a valid state for that function. More...
class | Dune::ParallelError
| Default exception if an error in the parallel communication of the program occurred. More...

## Macros

#define | DUNE_THROW(E, ...)

## Functions

| Dune::Exception::Exception ()
void | Dune::Exception::message (const std::string &msg)
| store string in internal message buffer
const char * | Dune::Exception::what () const noexcept override
| output internal message buffer
static void | Dune::Exception::registerHook (ExceptionHook *hook)
| add a functor which is called before a Dune::Exception is emitted (see Dune::ExceptionHook)
static void | Dune::Exception::clearHook ()
| remove all hooks
virtual | Dune::ExceptionHook::~ExceptionHook ()
virtual void | Dune::ExceptionHook::operator() ()=0
std::ostream & | Dune::operator<< (std::ostream &stream, const Exception &e)
| Dune::ExceptionStream< E >::ExceptionStream (const E &other)
| Dune::ExceptionStream< E >::ExceptionStream (E &&other)

## Friends

template<class T> requires (requires(std::ostringstream& oss, T t) { oss << t; } and not std::is_integral_v<T>)
ExceptionStream & | Dune::ExceptionStream< E >::operator<< (ExceptionStream &es, const T &t)
| Stream operator for l-value ExceptionStream and lvalue-reference.
template<class T> requires (requires(std::ostringstream& oss, T t) { oss << t; } and not std::is_integral_v<T>)
ExceptionStream | Dune::ExceptionStream< E >::operator<< (ExceptionStream &&es, const T &t)
| Stream operator for r-value ExceptionStream and lvalue-reference.
template<class T> requires std::is_integral_v<T>
ExceptionStream & | Dune::ExceptionStream< E >::operator<< (ExceptionStream &es, T t)
| Stream operator for l-value ExceptionStream and integral values.
template<class T> requires std::is_integral_v<T>
ExceptionStream | Dune::ExceptionStream< E >::operator<< (ExceptionStream &&es, T t)
| Stream operator for r-value ExceptionStream and integral values.
ExceptionStream & | Dune::ExceptionStream< E >::operator<< (ExceptionStream &es, std::ostream &(*t)(std::ostream &))
| Stream operator for l-value ExceptionStream and io manipulator.
ExceptionStream | Dune::ExceptionStream< E >::operator<< (ExceptionStream &&es, std::ostream &(*t)(std::ostream &))
| Stream operator for r-value ExceptionStream and io manipulator.

## Detailed Description

The Dune-exceptions are designed to allow a simple derivation of subclasses and to accept a text written in the '<<' syntax.

Example of usage:

#include <dune/common/exceptions.hh>
...
class FileNotFoundError : public Dune::IOError {};
...
void fileopen (std::string name) {
std::ifstream file;
file.open(name.c_str());
if (file == 0)
DUNE_THROW(FileNotFoundError, "File " << name << " not found!");
...
file.close();
}
...
int main () {
try {
...
} catch (Dune::IOError &e) {
std::cerr << "I/O error: " << e << std::endl;
return 1;
} catch (Dune::Exception &e) {
std::cerr << "Generic Dune error: " << e << std::endl;
return 2;
}
}
main
int main(int argc, char **argv)
Definition mpi_collective_benchmark.cc:297
exceptions.hh
A few common exception classes.
DUNE_THROW
#define DUNE_THROW(E,...)
Definition exceptions.hh:314
Dune::IOError
Default exception class for I/O errors.
Definition exceptions.hh:325

See also
  exceptions.hh for detailed info

## Macro Definition Documentation

## DUNE_THROW

#define DUNE_THROW | ( |  | E,
|  |  | ... )

Value:
throw Dune::ExceptionStream(E()) << THROWSPEC(E) __VA_OPT__(<<) __VA_ARGS__
Dune::ExceptionStream
Class for extending a Dune::Exception with a stream interface.
Definition exceptions.hh:201

Macro to throw an exception

#include <dune/common/exceptions.hh>

Parameters

  E | exception class derived from Dune::Exception
  m | reason for this exception in ostream-notation

Example:

if (filehandle == 0)
DUNE_THROW(FileError, "Could not open " << filename << " for reading!");

DUNE_THROW automatically adds information about the exception thrown to the text.

Note
  you can add a hook to be called before a Dune::Exception is emitted, e.g. to add additional information to the exception, or to invoke a debugger during parallel debugging. (see Dune::ExceptionHook)

## Function Documentation

## clearHook()

void Dune::Exception::clearHook | ( |  | ) |

static

remove all hooks

## Exception()

Dune::Exception::Exception | ( |  | ) |

## ExceptionStream() [1/2]

template<class E>

Dune::ExceptionStream< E >::ExceptionStream | ( | const E & | other | ) |

inline

## ExceptionStream() [2/2]

template<class E>

Dune::ExceptionStream< E >::ExceptionStream | ( | E && | other | ) |

inline

## message()

void Dune::Exception::message | ( | const std::string & | msg | ) |

store string in internal message buffer

## operator()()

virtual void Dune::ExceptionHook::operator() | ( |  | ) |

pure virtual

## operator<<()

std::ostream & Dune::operator<< | ( | std::ostream & | stream,
|  | const Exception & | e )

inline

## registerHook()

void Dune::Exception::registerHook | ( | ExceptionHook * | hook | ) |

static

add a functor which is called before a Dune::Exception is emitted (see Dune::ExceptionHook)

See also
  Dune::ExceptionHook

## what()

const char * Dune::Exception::what | ( |  | ) | const

override noexcept

output internal message buffer

## ~ExceptionHook()

virtual Dune::ExceptionHook::~ExceptionHook | ( |  | ) |

inline virtual

## Friends

## operator<< [1/6]

template<class E>
template<class T>
requires (requires(std::ostringstream& oss, T t) { oss << t; } and not std::is_integral_v<T>)

ExceptionStream operator<< | ( | ExceptionStream< E > && | es,
|  | const T & | t )

friend

Stream operator for r-value ExceptionStream and lvalue-reference.

## operator<< [2/6]

template<class E>

ExceptionStream operator<< | ( | ExceptionStream< E > && | es,
|  | std::ostream &(* | t )(std::ostream &) )

friend

Stream operator for r-value ExceptionStream and io manipulator.

## operator<< [3/6]

template<class E>
template<class T>
requires std::is_integral_v<T>

ExceptionStream operator<< | ( | ExceptionStream< E > && | es,
|  | T | t )

friend

Stream operator for r-value ExceptionStream and integral values.

## operator<< [4/6]

template<class E>
template<class T>
requires (requires(std::ostringstream& oss, T t) { oss << t; } and not std::is_integral_v<T>)

ExceptionStream & operator<< | ( | ExceptionStream< E > & | es,
|  | const T & | t )

friend

Stream operator for l-value ExceptionStream and lvalue-reference.

## operator<< [5/6]

template<class E>

ExceptionStream & operator<< | ( | ExceptionStream< E > & | es,
|  | std::ostream &(* | t )(std::ostream &) )

friend

Stream operator for l-value ExceptionStream and io manipulator.

## operator<< [6/6]

template<class E>
template<class T>
requires std::is_integral_v<T>

ExceptionStream & operator<< | ( | ExceptionStream< E > & | es,
|  | T | t )

friend

Stream operator for l-value ExceptionStream and integral values.

This is needed to support passing a static const members. The other overload leads to ODR use which requires that there is a namespace scope definition of the variable (which does often not exist).