...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
In some environments, such as game development or embedded systems, C++ exceptions are disabled or a customized error handling is needed. According to document N2271 EASTL -- Electronic Arts Standard Template Library exceptions can be disabled for several reasons:
In order to support environments without C++ exception support or environments
with special error handling needs, Boost.Container
changes error signalling behaviour when BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
or BOOST_NO_EXCEPTIONS
is defined.
The former shall be defined by the user and the latter can be either defined
by the user or implicitly defined by Boost.Confg
when the compiler has been invoked with the appropriate flag (like -fno-exceptions
in GCC).
When dealing with user-defined classes, (e.g. when constructing user-defined classes):
BOOST_NO_EXCEPTIONS
is defined, the library avoids using try
/catch
/throw
statements. The class writer must handle and propagate error situations
internally as no error will be propagated through Boost.Container.
BOOST_NO_EXCEPTIONS
is not defined, the library propagates
exceptions offering the exception guarantees detailed in the documentation.
When the library needs to throw an exception (such as out_of_range
when an incorrect index is used in vector::at
)], the
library calls a throw callback declared in <boost/container/throw_exception.hpp>
:
BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS
is defined, then the programmer must provide its own definition for all
throw_xxx
functions. Those
functions can't return, they must throw an exception or call std::exit
or std::abort
.
BOOST_NO_EXCEPTIONS
is defined, a BOOST_ASSERT_MSG
assertion is triggered (see Boost.Assert
for more information). If this assertion returns, then std::abort
is called.
std::out_of_range
).