C++ Implementation-Defined Behavior
***********************************

A conforming implementation of ISO C++ is required to document its choice of behavior in each of the areas that are designated ``implementation defined''.  The following lists all such areas, along with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC 14882:2003 standards.  Some areas are only implementation-defined in one version of the standard.

Some choices depend on the externally determined ABI for the platform (including standard character encodings) which GCC follows; these are listed as ``determined by ABI'' below.  See Binary Compatibility, and http://gcc.gnu.org/readings.html.  Some choices are documented in the preprocessor manual. See Implementation-defined behavior (The C Preprocessor).  Some choices are documented in the corresponding document for the C language.  See C Implementation.  Some choices are made by the library and operating system (or other environment when compiling for a freestanding environment); refer to their documentation for details.

Conditionally-Supported Behavior
================================

Each implementation shall include documentation that identifies all conditionally-supported constructs that it does not support (C++0x 1.4).

  * Whether an argument of class type with a non-trivial copy constructor or destructor can be passed to ... (C++0x 5.2.2).

     Such argument passing is supported, using the same pass-by-invisible-reference approach used for normal function arguments of such types.

Exception Handling
==================

  * In the situation where no matching handler is found, it is implementation-defined whether or not the stack is unwound before std::terminate() is called (C++98 15.5.1).

     The stack is not unwound before std::terminate is called.