|
|
|
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
|
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
|
[ ]>
|
[ ]>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ISO C++
|
ISO C++
|
|
|
|
|
library
|
library
|
|
|
|
|
|
|
|
|
|
|
Diagnostics
|
Diagnostics
|
Diagnostics
|
Diagnostics
|
|
|
|
|
|
|
|
|
Exceptions
|
Exceptions
|
|
|
|
|
API Reference
|
API Reference
|
|
|
All exception objects are defined in one of the standard header
|
All exception objects are defined in one of the standard header
|
files: exception,
|
files: exception,
|
stdexcept, new, and
|
stdexcept, new, and
|
typeinfo.
|
typeinfo.
|
|
|
|
|
|
|
The base exception object is exception,
|
The base exception object is exception,
|
located in exception. This object has no
|
located in exception. This object has no
|
string member.
|
string member.
|
|
|
|
|
|
|
Derived from this are several classes that may have a
|
Derived from this are several classes that may have a
|
string member: a full hierarchy can be
|
string member: a full hierarchy can be
|
found in the source documentation.
|
found in the source documentation.
|
|
|
|
|
|
|
Full API details.
|
Full API details.
|
|
|
|
|
|
|
|
|
|
|
|
|
Adding Data to exception
|
Adding Data to exception
|
|
|
The standard exception classes carry with them a single string as
|
The standard exception classes carry with them a single string as
|
data (usually describing what went wrong or where the 'throw' took
|
data (usually describing what went wrong or where the 'throw' took
|
place). It's good to remember that you can add your own data to
|
place). It's good to remember that you can add your own data to
|
these exceptions when extending the hierarchy:
|
these exceptions when extending the hierarchy:
|
|
|
|
|
struct My_Exception : public std::runtime_error
|
struct My_Exception : public std::runtime_error
|
{
|
{
|
public:
|
public:
|
My_Exception (const string& whatarg)
|
My_Exception (const string& whatarg)
|
: std::runtime_error(whatarg), e(errno), id(GetDataBaseID()) { }
|
: std::runtime_error(whatarg), e(errno), id(GetDataBaseID()) { }
|
int errno_at_time_of_throw() const { return e; }
|
int errno_at_time_of_throw() const { return e; }
|
DBID id_of_thing_that_threw() const { return id; }
|
DBID id_of_thing_that_threw() const { return id; }
|
protected:
|
protected:
|
int e;
|
int e;
|
DBID id; // some user-defined type
|
DBID id; // some user-defined type
|
};
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
Concept Checking
|
Concept Checking
|
|
|
In 1999, SGI added concept checkers to their
|
In 1999, SGI added concept checkers to their
|
implementation of the STL: code which checked the template
|
implementation of the STL: code which checked the template
|
parameters of instantiated pieces of the STL, in order to insure
|
parameters of instantiated pieces of the STL, in order to insure
|
that the parameters being used met the requirements of the
|
that the parameters being used met the requirements of the
|
standard. For example, the Standard requires that types passed as
|
standard. For example, the Standard requires that types passed as
|
template parameters to vector be
|
template parameters to vector be
|
"Assignable" (which means what you think it means). The
|
"Assignable" (which means what you think it means). The
|
checking was done during compilation, and none of the code was
|
checking was done during compilation, and none of the code was
|
executed at runtime.
|
executed at runtime.
|
|
|
|
|
Unfortunately, the size of the compiler files grew significantly
|
Unfortunately, the size of the compiler files grew significantly
|
as a result. The checking code itself was cumbersome. And bugs
|
as a result. The checking code itself was cumbersome. And bugs
|
were found in it on more than one occasion.
|
were found in it on more than one occasion.
|
|
|
|
|
The primary author of the checking code, Jeremy Siek, had already
|
The primary author of the checking code, Jeremy Siek, had already
|
started work on a replacement implementation. The new code has been
|
started work on a replacement implementation. The new code has been
|
formally reviewed and accepted into
|
formally reviewed and accepted into
|
the
|
the
|
Boost libraries, and we are pleased to incorporate it into the
|
Boost libraries, and we are pleased to incorporate it into the
|
GNU C++ library.
|
GNU C++ library.
|
|
|
|
|
The new version imposes a much smaller space overhead on the generated
|
The new version imposes a much smaller space overhead on the generated
|
object file. The checks are also cleaner and easier to read and
|
object file. The checks are also cleaner and easier to read and
|
understand.
|
understand.
|
|
|
|
|
|
|
They are off by default for all versions of GCC.
|
They are off by default for all versions of GCC.
|
They can be enabled at configure time with
|
They can be enabled at configure time with
|
--enable-concept-checks.
|
--enable-concept-checks.
|
You can enable them on a per-translation-unit basis with
|
You can enable them on a per-translation-unit basis with
|
-D_GLIBCXX_CONCEPT_CHECKS.
|
-D_GLIBCXX_CONCEPT_CHECKS.
|
|
|
|
|
|
|
Please note that the upcoming C++ standard has first-class
|
Please note that the upcoming C++ standard has first-class
|
support for template parameter constraints based on concepts in the core
|
support for template parameter constraints based on concepts in the core
|
language. This will obviate the need for the library-simulated concept
|
language. This will obviate the need for the library-simulated concept
|
checking described above.
|
checking described above.
|
|
|
|
|
|
|
|
|
|
|
|
|