You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/languages/cpp/doc/cppannotations.toc

801 lines
54 KiB

<!DOCTYPE tdeveloptoc>
<tdeveloptoc>
<title>C++ Annotations</title>
<base href="http://www.icce.rug.nl/documents/cplusplus/"/>
<tocsect1 name="Chapter 1: Overview Of The Chapters" url="cplusplus01.html#l1"/>
<tocsect1 name="Chapter 2: Introduction" url="cplusplus02.html#l2">
<tocsect2 name="2.1: What's new in the C++ Annotations" url="cplusplus02.html#l3"/>
<tocsect2 name="2.2: C++'s history" url="cplusplus02.html#l4">
<tocsect3 name="2.2.1: History of the C++ Annotations" url="cplusplus02.html#l5"/>
<tocsect3 name="2.2.2: Compiling a C program using a C++ compiler" url="cplusplus02.html#l6"/>
<tocsect3 name="2.2.3: Compiling a C++ program" url="cplusplus02.html#l7">
<tocsect4 name="2.2.3.1: C++ under MS-Windows" url="cplusplus02.html#l8"/>
<tocsect4 name="2.2.3.2: Compiling a C++ source text" url="cplusplus02.html#l9"/>
</tocsect3>
</tocsect2>
<tocsect2 name="2.3: C++: advantages and claims" url="cplusplus02.html#l10"/>
<tocsect2 name="2.4: What is Object-Oriented Programming?" url="cplusplus02.html#l11"/>
<tocsect2 name="2.5: Differences between C and C++" url="cplusplus02.html#l12">
<tocsect3 name="2.5.1: The function `main'" url="cplusplus02.html#l13"/>
<tocsect3 name="2.5.2: End-of-line comment" url="cplusplus02.html#l14"/>
<tocsect3 name="2.5.3: Strict type checking" url="cplusplus02.html#l15"/>
<tocsect3 name="2.5.4: Function Overloading" url="cplusplus02.html#l16"/>
<tocsect3 name="2.5.5: Default function arguments" url="cplusplus02.html#l17"/>
<tocsect3 name="2.5.6: NULL-pointers vs. 0-pointers and nullptr" url="cplusplus02.html#l18"/>
<tocsect3 name="2.5.7: The `void' parameter list" url="cplusplus02.html#l19"/>
<tocsect3 name="2.5.8: The `#define __cplusplus'" url="cplusplus02.html#l20"/>
<tocsect3 name="2.5.9: Using standard C functions" url="cplusplus02.html#l21"/>
<tocsect3 name="2.5.10: Header files for both C and C++" url="cplusplus02.html#l22"/>
<tocsect3 name="2.5.11: Defining local variables" url="cplusplus02.html#l23"/>
<tocsect3 name="2.5.12: The keyword `typedef'" url="cplusplus02.html#l24"/>
<tocsect3 name="2.5.13: Functions as part of a struct" url="cplusplus02.html#l25"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 3: A First Impression Of C++" url="cplusplus03.html#l26">
<tocsect2 name="3.1: Extensions to C" url="cplusplus03.html#l27">
<tocsect3 name="3.1.1: Namespaces" url="cplusplus03.html#l28"/>
<tocsect3 name="3.1.2: The scope resolution operator ::" url="cplusplus03.html#l29"/>
<tocsect3 name="3.1.3: Using the keyword `const'" url="cplusplus03.html#l30"/>
<tocsect3 name="3.1.4: `cout', `cin', and `cerr'" url="cplusplus03.html#l31"/>
</tocsect2>
<tocsect2 name="3.2: Functions as part of structs" url="cplusplus03.html#l32">
<tocsect3 name="3.2.1: Data hiding: public, private and class" url="cplusplus03.html#l33"/>
<tocsect3 name="3.2.2: Structs in C vs. structs in C++" url="cplusplus03.html#l34"/>
</tocsect2>
<tocsect2 name="3.3: More extensions to C" url="cplusplus03.html#l35">
<tocsect3 name="3.3.1: References" url="cplusplus03.html#l36"/>
<tocsect3 name="3.3.2: Rvalue References" url="cplusplus03.html#l37"/>
<tocsect3 name="3.3.3: Strongly typed enumerations" url="cplusplus03.html#l38"/>
<tocsect3 name="3.3.4: Initializer lists" url="cplusplus03.html#l39"/>
<tocsect3 name="3.3.5: Type inference using `auto'" url="cplusplus03.html#l40"/>
<tocsect3 name="3.3.6: Defining types and 'using' declarations" url="cplusplus03.html#l41"/>
<tocsect3 name="3.3.7: Range-based for-loops" url="cplusplus03.html#l42"/>
<tocsect3 name="3.3.8: Raw String Literals" url="cplusplus03.html#l43"/>
</tocsect2>
<tocsect2 name="3.4: New language-defined data types" url="cplusplus03.html#l44">
<tocsect3 name="3.4.1: The data type `bool'" url="cplusplus03.html#l45"/>
<tocsect3 name="3.4.2: The data type `wchar_t'" url="cplusplus03.html#l46"/>
<tocsect3 name="3.4.3: Unicode encoding" url="cplusplus03.html#l47"/>
<tocsect3 name="3.4.4: The data type `long long int'" url="cplusplus03.html#l48"/>
<tocsect3 name="3.4.5: The data type `size_t'" url="cplusplus03.html#l49"/>
</tocsect2>
<tocsect2 name="3.5: A new syntax for casts" url="cplusplus03.html#l50">
<tocsect3 name="3.5.1: The `static_cast'-operator" url="cplusplus03.html#l51"/>
<tocsect3 name="3.5.2: The `const_cast'-operator" url="cplusplus03.html#l52"/>
<tocsect3 name="3.5.3: The `reinterpret_cast'-operator" url="cplusplus03.html#l53"/>
<tocsect3 name="3.5.4: The `dynamic_cast'-operator" url="cplusplus03.html#l54"/>
<tocsect3 name="3.5.5: Casting 'shared_ptr' objects" url="cplusplus03.html#l55"/>
</tocsect2>
<tocsect2 name="3.6: Keywords and reserved names in C++" url="cplusplus03.html#l56"/>
</tocsect1>
<tocsect1 name="Chapter 4: Name Spaces" url="cplusplus04.html#l57">
<tocsect2 name="4.1: Namespaces" url="cplusplus04.html#l58">
<tocsect3 name="4.1.1: Defining namespaces" url="cplusplus04.html#l59">
<tocsect4 name="4.1.1.1: Declaring entities in namespaces" url="cplusplus04.html#l60"/>
<tocsect4 name="4.1.1.2: A closed namespace" url="cplusplus04.html#l61"/>
</tocsect3>
<tocsect3 name="4.1.2: Referring to entities" url="cplusplus04.html#l62">
<tocsect4 name="4.1.2.1: The `using' directive" url="cplusplus04.html#l63"/>
<tocsect4 name="4.1.2.2: `Koenig lookup'" url="cplusplus04.html#l64"/>
</tocsect3>
<tocsect3 name="4.1.3: The standard namespace" url="cplusplus04.html#l65"/>
<tocsect3 name="4.1.4: Nesting namespaces and namespace aliasing" url="cplusplus04.html#l66">
<tocsect4 name="4.1.4.1: Defining entities outside of their namespaces" url="cplusplus04.html#l67"/>
</tocsect3>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 5: The `string' Data Type" url="cplusplus05.html#l68">
<tocsect2 name="5.1: Operations on strings" url="cplusplus05.html#l69"/>
<tocsect2 name="5.2: A std::string reference" url="cplusplus05.html#l70">
<tocsect3 name="5.2.1: Initializers" url="cplusplus05.html#l71"/>
<tocsect3 name="5.2.2: Iterators" url="cplusplus05.html#l72"/>
<tocsect3 name="5.2.3: Operators" url="cplusplus05.html#l73"/>
<tocsect3 name="5.2.4: Member functions" url="cplusplus05.html#l74"/>
<tocsect3 name="5.2.5: Conversion functions" url="cplusplus05.html#l75"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 6: The IO-stream Library" url="cplusplus06.html#l76">
<tocsect2 name="6.1: Special header files" url="cplusplus06.html#l77"/>
<tocsect2 name="6.2: The foundation: the class `ios_base'" url="cplusplus06.html#l78"/>
<tocsect2 name="6.3: Interfacing `streambuf' objects: the class `ios'" url="cplusplus06.html#l79">
<tocsect3 name="6.3.1: Condition states" url="cplusplus06.html#l80"/>
<tocsect3 name="6.3.2: Formatting output and input" url="cplusplus06.html#l81">
<tocsect4 name="6.3.2.1: Format modifying member functions" url="cplusplus06.html#l82"/>
<tocsect4 name="6.3.2.2: Formatting flags" url="cplusplus06.html#l83"/>
</tocsect3>
</tocsect2>
<tocsect2 name="6.4: Output" url="cplusplus06.html#l84">
<tocsect3 name="6.4.1: Basic output: the class `ostream'" url="cplusplus06.html#l85">
<tocsect4 name="6.4.1.1: Writing to `ostream' objects" url="cplusplus06.html#l86"/>
<tocsect4 name="6.4.1.2: `ostream' positioning" url="cplusplus06.html#l87"/>
<tocsect4 name="6.4.1.3: `ostream' flushing" url="cplusplus06.html#l88"/>
</tocsect3>
<tocsect3 name="6.4.2: Output to files: the class `ofstream'" url="cplusplus06.html#l89">
<tocsect4 name="6.4.2.1: Modes for opening stream objects" url="cplusplus06.html#l90"/>
</tocsect3>
<tocsect3 name="6.4.3: Output to memory: the class `ostringstream'" url="cplusplus06.html#l91"/>
</tocsect2>
<tocsect2 name="6.5: Input" url="cplusplus06.html#l92">
<tocsect3 name="6.5.1: Basic input: the class `istream'" url="cplusplus06.html#l93">
<tocsect4 name="6.5.1.1: Reading from `istream' objects" url="cplusplus06.html#l94"/>
<tocsect4 name="6.5.1.2: `istream' positioning" url="cplusplus06.html#l95"/>
</tocsect3>
<tocsect3 name="6.5.2: Input from files: the class `ifstream'" url="cplusplus06.html#l96"/>
<tocsect3 name="6.5.3: Input from memory: the class `istringstream'" url="cplusplus06.html#l97"/>
<tocsect3 name="6.5.4: Copying streams" url="cplusplus06.html#l98"/>
<tocsect3 name="6.5.5: Coupling streams" url="cplusplus06.html#l99"/>
</tocsect2>
<tocsect2 name="6.6: Advanced topics" url="cplusplus06.html#l100">
<tocsect3 name="6.6.1: Redirecting streams" url="cplusplus06.html#l101"/>
<tocsect3 name="6.6.2: Reading AND Writing streams" url="cplusplus06.html#l102"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 7: Classes" url="cplusplus07.html#l103">
<tocsect2 name="7.1: The constructor" url="cplusplus07.html#l104">
<tocsect3 name="7.1.1: A first application" url="cplusplus07.html#l105"/>
<tocsect3 name="7.1.2: Constructors: with and without arguments" url="cplusplus07.html#l106">
<tocsect4 name="7.1.2.1: The order of construction" url="cplusplus07.html#l107"/>
</tocsect3>
</tocsect2>
<tocsect2 name="7.2: Ambiguity resolution" url="cplusplus07.html#l108">
<tocsect3 name="7.2.1: Types `Data' vs. `Data()'" url="cplusplus07.html#l109"/>
<tocsect3 name="7.2.2: Superfluous parentheses" url="cplusplus07.html#l110"/>
<tocsect3 name="7.2.3: Existing types" url="cplusplus07.html#l111"/>
</tocsect2>
<tocsect2 name="7.3: Objects inside objects: composition" url="cplusplus07.html#l112">
<tocsect3 name="7.3.1: Composition and const objects: const member initializers" url="cplusplus07.html#l113"/>
<tocsect3 name="7.3.2: Composition and reference objects: reference member initializers" url="cplusplus07.html#l114"/>
</tocsect2>
<tocsect2 name="7.4: Data member initializers" url="cplusplus07.html#l115">
<tocsect3 name="7.4.1: Delegating constructors" url="cplusplus07.html#l116"/>
</tocsect2>
<tocsect2 name="7.5: Uniform initialization" url="cplusplus07.html#l117"/>
<tocsect2 name="7.6: Defaulted and deleted class members" url="cplusplus07.html#l118"/>
<tocsect2 name="7.7: Const member functions and const objects" url="cplusplus07.html#l119">
<tocsect3 name="7.7.1: Anonymous objects" url="cplusplus07.html#l120">
<tocsect4 name="7.7.1.1: Subtleties with anonymous objects" url="cplusplus07.html#l121"/>
</tocsect3>
</tocsect2>
<tocsect2 name="7.8: The keyword `inline'" url="cplusplus07.html#l122">
<tocsect3 name="7.8.1: Defining members inline" url="cplusplus07.html#l123"/>
<tocsect3 name="7.8.2: When to use inline functions" url="cplusplus07.html#l124">
<tocsect4 name="7.8.2.1: A prelude: when NOT to use inline functions" url="cplusplus07.html#l125"/>
</tocsect3>
</tocsect2>
<tocsect2 name="7.9: Local classes: classes inside functions" url="cplusplus07.html#l126"/>
<tocsect2 name="7.10: The keyword `mutable'" url="cplusplus07.html#l127"/>
<tocsect2 name="7.11: Header file organization" url="cplusplus07.html#l128">
<tocsect3 name="7.11.1: Using namespaces in header files" url="cplusplus07.html#l129"/>
</tocsect2>
<tocsect2 name="7.12: Sizeof applied to class data members" url="cplusplus07.html#l130"/>
</tocsect1>
<tocsect1 name="Chapter 8: Static Data And Functions" url="cplusplus08.html#l131">
<tocsect2 name="8.1: Static data" url="cplusplus08.html#l132">
<tocsect3 name="8.1.1: Private static data" url="cplusplus08.html#l133"/>
<tocsect3 name="8.1.2: Public static data" url="cplusplus08.html#l134"/>
<tocsect3 name="8.1.3: Initializing static const data" url="cplusplus08.html#l135"/>
<tocsect3 name="8.1.4: Generalized constant expressions (constexpr)" url="cplusplus08.html#l136">
<tocsect4 name="8.1.4.1: Constant expression data" url="cplusplus08.html#l137"/>
</tocsect3>
</tocsect2>
<tocsect2 name="8.2: Static member functions" url="cplusplus08.html#l138">
<tocsect3 name="8.2.1: Calling conventions" url="cplusplus08.html#l139"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 9: Classes And Memory Allocation" url="cplusplus09.html#l140">
<tocsect2 name="9.1: Operators `new' and `delete'" url="cplusplus09.html#l141">
<tocsect3 name="9.1.1: Allocating arrays" url="cplusplus09.html#l142"/>
<tocsect3 name="9.1.2: Deleting arrays" url="cplusplus09.html#l143"/>
<tocsect3 name="9.1.3: Enlarging arrays" url="cplusplus09.html#l144"/>
<tocsect3 name="9.1.4: Managing `raw' memory" url="cplusplus09.html#l145"/>
<tocsect3 name="9.1.5: The `placement new' operator" url="cplusplus09.html#l146"/>
</tocsect2>
<tocsect2 name="9.2: The destructor" url="cplusplus09.html#l147">
<tocsect3 name="9.2.1: Object pointers revisited" url="cplusplus09.html#l148"/>
<tocsect3 name="9.2.2: The function set_new_handler()" url="cplusplus09.html#l149"/>
</tocsect2>
<tocsect2 name="9.3: The assignment operator" url="cplusplus09.html#l150">
<tocsect3 name="9.3.1: Overloading the assignment operator" url="cplusplus09.html#l151">
<tocsect4 name="9.3.1.1: The member 'operator=()'" url="cplusplus09.html#l152"/>
</tocsect3>
</tocsect2>
<tocsect2 name="9.4: The `this' pointer" url="cplusplus09.html#l153">
<tocsect3 name="9.4.1: Sequential assignments and this" url="cplusplus09.html#l154"/>
</tocsect2>
<tocsect2 name="9.5: The copy constructor: initialization vs. assignment" url="cplusplus09.html#l155"/>
<tocsect2 name="9.6: Revising the assignment operator" url="cplusplus09.html#l156">
<tocsect3 name="9.6.1: Swapping" url="cplusplus09.html#l157">
<tocsect4 name="9.6.1.1: Fast swapping" url="cplusplus09.html#l158"/>
</tocsect3>
</tocsect2>
<tocsect2 name="9.7: Moving data" url="cplusplus09.html#l159">
<tocsect3 name="9.7.1: The move constructor (dynamic data)" url="cplusplus09.html#l160"/>
<tocsect3 name="9.7.2: The move constructor (composition)" url="cplusplus09.html#l161"/>
<tocsect3 name="9.7.3: Move-assignment" url="cplusplus09.html#l162"/>
<tocsect3 name="9.7.4: Revising the assignment operator (part II)" url="cplusplus09.html#l163"/>
<tocsect3 name="9.7.5: Moving and the destructor" url="cplusplus09.html#l164"/>
<tocsect3 name="9.7.6: Move-only classes" url="cplusplus09.html#l165"/>
<tocsect3 name="9.7.7: Default move constructors and assignment operators" url="cplusplus09.html#l166"/>
<tocsect3 name="9.7.8: Moving: implications for class design" url="cplusplus09.html#l167"/>
</tocsect2>
<tocsect2 name="9.8: Copy Elision and Return Value Optimization" url="cplusplus09.html#l168"/>
<tocsect2 name="9.9: Plain Old Data" url="cplusplus09.html#l169"/>
<tocsect2 name="9.10: Conclusion" url="cplusplus09.html#l170"/>
</tocsect1>
<tocsect1 name="Chapter 10: Exceptions" url="cplusplus10.html#l171">
<tocsect2 name="10.1: Exception syntax" url="cplusplus10.html#l172"/>
<tocsect2 name="10.2: An example using exceptions" url="cplusplus10.html#l173">
<tocsect3 name="10.2.1: Anachronisms: `setjmp' and `longjmp'" url="cplusplus10.html#l174"/>
<tocsect3 name="10.2.2: Exceptions: the preferred alternative" url="cplusplus10.html#l175"/>
</tocsect2>
<tocsect2 name="10.3: Throwing exceptions" url="cplusplus10.html#l176">
<tocsect3 name="10.3.1: The empty `throw' statement" url="cplusplus10.html#l177"/>
</tocsect2>
<tocsect2 name="10.4: The try block" url="cplusplus10.html#l178"/>
<tocsect2 name="10.5: Catching exceptions" url="cplusplus10.html#l179">
<tocsect3 name="10.5.1: The default catcher" url="cplusplus10.html#l180"/>
</tocsect2>
<tocsect2 name="10.6: Declaring exception throwers (deprecated)" url="cplusplus10.html#l181"/>
<tocsect2 name="10.7: Iostreams and exceptions" url="cplusplus10.html#l182"/>
<tocsect2 name="10.8: Standard Exceptions" url="cplusplus10.html#l183"/>
<tocsect2 name="10.9: System error, error code and error category" url="cplusplus10.html#l184">
<tocsect3 name="10.9.1: The class `error_code'" url="cplusplus10.html#l185"/>
<tocsect3 name="10.9.2: The class `error_category'" url="cplusplus10.html#l186"/>
</tocsect2>
<tocsect2 name="10.10: Exception guarantees" url="cplusplus10.html#l187">
<tocsect3 name="10.10.1: The basic guarantee" url="cplusplus10.html#l188"/>
<tocsect3 name="10.10.2: The strong guarantee" url="cplusplus10.html#l189"/>
<tocsect3 name="10.10.3: The nothrow guarantee" url="cplusplus10.html#l190"/>
</tocsect2>
<tocsect2 name="10.11: Function try blocks" url="cplusplus10.html#l191"/>
<tocsect2 name="10.12: Exceptions in constructors and destructors" url="cplusplus10.html#l192"/>
</tocsect1>
<tocsect1 name="Chapter 11: More Operator Overloading" url="cplusplus11.html#l193">
<tocsect2 name="11.1: Overloading `operator[]()'" url="cplusplus11.html#l194"/>
<tocsect2 name="11.2: Overloading the insertion and extraction operators" url="cplusplus11.html#l195"/>
<tocsect2 name="11.3: Conversion operators" url="cplusplus11.html#l196"/>
<tocsect2 name="11.4: The keyword `explicit'" url="cplusplus11.html#l197">
<tocsect3 name="11.4.1: Explicit conversion operators" url="cplusplus11.html#l198"/>
</tocsect2>
<tocsect2 name="11.5: Overloading the increment and decrement operators" url="cplusplus11.html#l199"/>
<tocsect2 name="11.6: Overloading binary operators" url="cplusplus11.html#l200"/>
<tocsect2 name="11.7: Overloading `operator new(size_t)'" url="cplusplus11.html#l201"/>
<tocsect2 name="11.8: Overloading `operator delete(void *)'" url="cplusplus11.html#l202"/>
<tocsect2 name="11.9: Operators `new[]' and `delete[]'" url="cplusplus11.html#l203">
<tocsect3 name="11.9.1: Overloading `new[]'" url="cplusplus11.html#l204"/>
<tocsect3 name="11.9.2: Overloading `delete[]'" url="cplusplus11.html#l205"/>
<tocsect3 name="11.9.3: `new[]', `delete[]' and exceptions" url="cplusplus11.html#l206"/>
</tocsect2>
<tocsect2 name="11.10: Function Objects" url="cplusplus11.html#l207">
<tocsect3 name="11.10.1: Constructing manipulators" url="cplusplus11.html#l208">
<tocsect4 name="11.10.1.1: Manipulators requiring arguments" url="cplusplus11.html#l209"/>
</tocsect3>
</tocsect2>
<tocsect2 name="11.11: The case of [io]fstream::open()" url="cplusplus11.html#l210"/>
<tocsect2 name="11.12: User-defined literals" url="cplusplus11.html#l211"/>
<tocsect2 name="11.13: Overloadable operators" url="cplusplus11.html#l212"/>
</tocsect1>
<tocsect1 name="Chapter 12: Abstract Containers" url="cplusplus12.html#l213">
<tocsect2 name="12.1: Notations used in this chapter" url="cplusplus12.html#l214"/>
<tocsect2 name="12.2: The `pair' container" url="cplusplus12.html#l215"/>
<tocsect2 name="12.3: Allocators" url="cplusplus12.html#l216"/>
<tocsect2 name="12.4: Available Containers" url="cplusplus12.html#l217">
<tocsect3 name="12.4.1: ARRAY" url="cplusplus12.html#l218"/>
<tocsect3 name="12.4.2: The `vector' container" url="cplusplus12.html#l219"/>
<tocsect3 name="12.4.3: The `list' container" url="cplusplus12.html#l220"/>
<tocsect3 name="12.4.4: The `queue' container" url="cplusplus12.html#l221"/>
<tocsect3 name="12.4.5: The `priority_queue' container" url="cplusplus12.html#l222"/>
<tocsect3 name="12.4.6: The `deque' container" url="cplusplus12.html#l223"/>
<tocsect3 name="12.4.7: The `map' container" url="cplusplus12.html#l224">
<tocsect4 name="12.4.7.1: The `map' constructors" url="cplusplus12.html#l225"/>
<tocsect4 name="12.4.7.2: The `map' operators" url="cplusplus12.html#l226"/>
<tocsect4 name="12.4.7.3: The `map' public members" url="cplusplus12.html#l227"/>
<tocsect4 name="12.4.7.4: The `map': a simple example" url="cplusplus12.html#l228"/>
</tocsect3>
<tocsect3 name="12.4.8: The `multimap' container" url="cplusplus12.html#l229"/>
<tocsect3 name="12.4.9: The `set' container" url="cplusplus12.html#l230"/>
<tocsect3 name="12.4.10: The `multiset' container" url="cplusplus12.html#l231"/>
<tocsect3 name="12.4.11: The `stack' container" url="cplusplus12.html#l232"/>
<tocsect3 name="12.4.12: The `unordered_map' container (`hash table')" url="cplusplus12.html#l233">
<tocsect4 name="12.4.12.1: The `unordered_map' constructors" url="cplusplus12.html#l234"/>
<tocsect4 name="12.4.12.2: The `unordered_map' public members" url="cplusplus12.html#l235"/>
<tocsect4 name="12.4.12.3: The `unordered_multimap' container" url="cplusplus12.html#l236"/>
</tocsect3>
<tocsect3 name="12.4.13: The `unordered_set' container" url="cplusplus12.html#l237">
<tocsect4 name="12.4.13.1: The `unordered_multiset' container" url="cplusplus12.html#l238"/>
</tocsect3>
</tocsect2>
<tocsect2 name="12.5: Regular Expressions" url="cplusplus12.html#l239"/>
<tocsect2 name="12.6: The `complex' container" url="cplusplus12.html#l240"/>
<tocsect2 name="12.7: Unrestricted Unions" url="cplusplus12.html#l241">
<tocsect3 name="12.7.1: Implementing the destructor" url="cplusplus12.html#l242"/>
<tocsect3 name="12.7.2: Embedding an unrestricted union in a surrounding class" url="cplusplus12.html#l243"/>
<tocsect3 name="12.7.3: Destroying an embedded unrestricted union" url="cplusplus12.html#l244"/>
<tocsect3 name="12.7.4: Copy and move constructors" url="cplusplus12.html#l245"/>
<tocsect3 name="12.7.5: Assignment" url="cplusplus12.html#l246"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 13: Inheritance" url="cplusplus13.html#l247">
<tocsect2 name="13.1: Related types" url="cplusplus13.html#l248">
<tocsect3 name="13.1.1: Inheritance depth: desirable?" url="cplusplus13.html#l249"/>
</tocsect2>
<tocsect2 name="13.2: Access rights: public, private, protected" url="cplusplus13.html#l250">
<tocsect3 name="13.2.1: Public, protected and private derivation" url="cplusplus13.html#l251"/>
<tocsect3 name="13.2.2: Promoting access rights" url="cplusplus13.html#l252"/>
</tocsect2>
<tocsect2 name="13.3: The constructor of a derived class" url="cplusplus13.html#l253">
<tocsect3 name="13.3.1: Move construction" url="cplusplus13.html#l254"/>
<tocsect3 name="13.3.2: Move assignment" url="cplusplus13.html#l255"/>
<tocsect3 name="13.3.3: Inheriting constructors" url="cplusplus13.html#l256"/>
</tocsect2>
<tocsect2 name="13.4: The destructor of a derived class" url="cplusplus13.html#l257"/>
<tocsect2 name="13.5: Redefining member functions" url="cplusplus13.html#l258"/>
<tocsect2 name="13.6: i/ostream::init" url="cplusplus13.html#l259"/>
<tocsect2 name="13.7: Multiple inheritance" url="cplusplus13.html#l260"/>
<tocsect2 name="13.8: Conversions between base classes and derived classes" url="cplusplus13.html#l261">
<tocsect3 name="13.8.1: Conversions with object assignments" url="cplusplus13.html#l262"/>
<tocsect3 name="13.8.2: Conversions with pointer assignments" url="cplusplus13.html#l263"/>
</tocsect2>
<tocsect2 name="13.9: Using non-default constructors with new[]" url="cplusplus13.html#l264"/>
</tocsect1>
<tocsect1 name="Chapter 14: Polymorphism" url="cplusplus14.html#l265">
<tocsect2 name="14.1: Virtual functions" url="cplusplus14.html#l266"/>
<tocsect2 name="14.2: Virtual destructors" url="cplusplus14.html#l267"/>
<tocsect2 name="14.3: Pure virtual functions" url="cplusplus14.html#l268">
<tocsect3 name="14.3.1: Implementing pure virtual functions" url="cplusplus14.html#l269"/>
</tocsect2>
<tocsect2 name="14.4: Explicit virtual overrides" url="cplusplus14.html#l270"/>
<tocsect2 name="14.5: Virtual functions and multiple inheritance" url="cplusplus14.html#l271">
<tocsect3 name="14.5.1: Ambiguity in multiple inheritance" url="cplusplus14.html#l272"/>
<tocsect3 name="14.5.2: Virtual base classes" url="cplusplus14.html#l273"/>
<tocsect3 name="14.5.3: When virtual derivation is not appropriate" url="cplusplus14.html#l274"/>
</tocsect2>
<tocsect2 name="14.6: Run-time type identification" url="cplusplus14.html#l275">
<tocsect3 name="14.6.1: The dynamic_cast operator" url="cplusplus14.html#l276"/>
<tocsect3 name="14.6.2: The `typeid' operator" url="cplusplus14.html#l277"/>
</tocsect2>
<tocsect2 name="14.7: Inheritance: when to use to achieve what?" url="cplusplus14.html#l278"/>
<tocsect2 name="14.8: The `streambuf' class" url="cplusplus14.html#l279">
<tocsect3 name="14.8.1: Protected `streambuf' members" url="cplusplus14.html#l280">
<tocsect4 name="14.8.1.1: Protected members for input operations" url="cplusplus14.html#l281"/>
<tocsect4 name="14.8.1.2: Protected members for output operations" url="cplusplus14.html#l282"/>
<tocsect4 name="14.8.1.3: Protected members for buffer manipulation" url="cplusplus14.html#l283"/>
<tocsect4 name="14.8.1.4: Deriving classes from `streambuf'" url="cplusplus14.html#l284"/>
</tocsect3>
<tocsect3 name="14.8.2: The class `filebuf'" url="cplusplus14.html#l285"/>
</tocsect2>
<tocsect2 name="14.9: A polymorphic exception class" url="cplusplus14.html#l286"/>
<tocsect2 name="14.10: How polymorphism is implemented" url="cplusplus14.html#l287"/>
<tocsect2 name="14.11: Undefined reference to vtable ..." url="cplusplus14.html#l288"/>
<tocsect2 name="14.12: Virtual constructors" url="cplusplus14.html#l289"/>
</tocsect1>
<tocsect1 name="Chapter 15: Friends" url="cplusplus15.html#l290">
<tocsect2 name="15.1: Friend functions" url="cplusplus15.html#l291"/>
<tocsect2 name="15.2: Extended friend declarations" url="cplusplus15.html#l292"/>
</tocsect1>
<tocsect1 name="Chapter 16: Classes Having Pointers To Members" url="cplusplus16.html#l293">
<tocsect2 name="16.1: Pointers to members: an example" url="cplusplus16.html#l294"/>
<tocsect2 name="16.2: Defining pointers to members" url="cplusplus16.html#l295"/>
<tocsect2 name="16.3: Using pointers to members" url="cplusplus16.html#l296"/>
<tocsect2 name="16.4: Pointers to static members" url="cplusplus16.html#l297"/>
<tocsect2 name="16.5: Pointer sizes" url="cplusplus16.html#l298"/>
</tocsect1>
<tocsect1 name="Chapter 17: Nested Classes" url="cplusplus17.html#l299">
<tocsect2 name="17.1: Defining nested class members" url="cplusplus17.html#l300"/>
<tocsect2 name="17.2: Declaring nested classes" url="cplusplus17.html#l301"/>
<tocsect2 name="17.3: Accessing private members in nested classes" url="cplusplus17.html#l302"/>
<tocsect2 name="17.4: Nesting enumerations" url="cplusplus17.html#l303">
<tocsect3 name="17.4.1: Empty enumerations" url="cplusplus17.html#l304"/>
</tocsect2>
<tocsect2 name="17.5: Revisiting virtual constructors" url="cplusplus17.html#l305"/>
</tocsect1>
<tocsect1 name="Chapter 18: The Standard Template Library" url="cplusplus18.html#l306">
<tocsect2 name="18.1: Predefined function objects" url="cplusplus18.html#l307">
<tocsect3 name="18.1.1: Arithmetic function objects" url="cplusplus18.html#l308"/>
<tocsect3 name="18.1.2: Relational function objects" url="cplusplus18.html#l309"/>
<tocsect3 name="18.1.3: Logical function objects" url="cplusplus18.html#l310"/>
<tocsect3 name="18.1.4: Function adaptors" url="cplusplus18.html#l311">
<tocsect4 name="18.1.4.1: Binders" url="cplusplus18.html#l312"/>
<tocsect4 name="18.1.4.2: Negators" url="cplusplus18.html#l313"/>
</tocsect3>
</tocsect2>
<tocsect2 name="18.2: Iterators" url="cplusplus18.html#l314">
<tocsect3 name="18.2.1: Insert iterators" url="cplusplus18.html#l315"/>
<tocsect3 name="18.2.2: Iterators for `istream' objects" url="cplusplus18.html#l316">
<tocsect4 name="18.2.2.1: Iterators for `istreambuf' objects" url="cplusplus18.html#l317"/>
</tocsect3>
<tocsect3 name="18.2.3: Iterators for `ostream' objects" url="cplusplus18.html#l318">
<tocsect4 name="18.2.3.1: Iterators for `ostreambuf' objects" url="cplusplus18.html#l319"/>
</tocsect3>
</tocsect2>
<tocsect2 name="18.3: The class 'unique_ptr'" url="cplusplus18.html#l320">
<tocsect3 name="18.3.1: Defining `unique_ptr' objects" url="cplusplus18.html#l321"/>
<tocsect3 name="18.3.2: Creating a plain `unique_ptr'" url="cplusplus18.html#l322"/>
<tocsect3 name="18.3.3: Moving another `unique_ptr'" url="cplusplus18.html#l323"/>
<tocsect3 name="18.3.4: Pointing to a newly allocated object" url="cplusplus18.html#l324"/>
<tocsect3 name="18.3.5: Operators and members" url="cplusplus18.html#l325"/>
<tocsect3 name="18.3.6: Using `unique_ptr' objects for arrays" url="cplusplus18.html#l326"/>
</tocsect2>
<tocsect2 name="18.4: The class 'shared_ptr'" url="cplusplus18.html#l328">
<tocsect3 name="18.4.1: Defining `shared_ptr' objects" url="cplusplus18.html#l329"/>
<tocsect3 name="18.4.2: Creating a plain `shared_ptr'" url="cplusplus18.html#l330"/>
<tocsect3 name="18.4.3: Pointing to a newly allocated object" url="cplusplus18.html#l331"/>
<tocsect3 name="18.4.4: Operators and members" url="cplusplus18.html#l332"/>
<tocsect3 name="18.4.5: Casting shared pointers" url="cplusplus18.html#l333"/>
<tocsect3 name="18.4.6: Using `shared_ptr' objects for arrays" url="cplusplus18.html#l334"/>
</tocsect2>
<tocsect2 name="18.5: Using `make_shared' to combine `shared_ptr' and `new'" url="cplusplus18.html#l335"/>
<tocsect2 name="18.6: Classes having pointer data members" url="cplusplus18.html#l336"/>
<tocsect2 name="18.7: Specifying time (absolute and relative)" url="cplusplus18.html#l337">
<tocsect3 name="18.7.1: Time units: the class 'ratio'" url="cplusplus18.html#l338"/>
<tocsect3 name="18.7.2: An amount of time: the class 'duration'" url="cplusplus18.html#l339"/>
<tocsect3 name="18.7.3: Clocks measuring time" url="cplusplus18.html#l340"/>
<tocsect3 name="18.7.4: Points in time: the class 'time_point'" url="cplusplus18.html#l341"/>
</tocsect2>
<tocsect2 name="18.8: Multi Threading" url="cplusplus18.html#l342">
<tocsect3 name="18.8.1: The namespace `std::this_thread'" url="cplusplus18.html#l343"/>
<tocsect3 name="18.8.2: The class `std::thread'" url="cplusplus18.html#l344"/>
<tocsect3 name="18.8.3: Synchronization (mutexes)" url="cplusplus18.html#l345"/>
<tocsect3 name="18.8.4: Locks and lock handling" url="cplusplus18.html#l346">
<tocsect4 name="18.8.4.1: Deadlocks" url="cplusplus18.html#l347"/>
</tocsect3>
<tocsect3 name="18.8.5: Event handling (condition variables)" url="cplusplus18.html#l348">
<tocsect4 name="18.8.5.1: The class 'condition_variable'" url="cplusplus18.html#l349"/>
<tocsect4 name="18.8.5.2: The class 'condition_variable_any'" url="cplusplus18.html#l350"/>
<tocsect4 name="18.8.5.3: An example using condition variables" url="cplusplus18.html#l351"/>
</tocsect3>
</tocsect2>
<tocsect2 name="18.9: Lambda expressions" url="cplusplus18.html#l352"/>
<tocsect2 name="18.10: Randomization and Statistical Distributions" url="cplusplus18.html#l353">
<tocsect3 name="18.10.1: Random Number Generators" url="cplusplus18.html#l354"/>
<tocsect3 name="18.10.2: Statistical distributions" url="cplusplus18.html#l355">
<tocsect4 name="18.10.2.1: Bernoulli distribution" url="cplusplus18.html#l356"/>
<tocsect4 name="18.10.2.2: Binomial distribution" url="cplusplus18.html#l357"/>
<tocsect4 name="18.10.2.3: Cauchy distribution" url="cplusplus18.html#l358"/>
<tocsect4 name="18.10.2.4: Chi-squared distribution" url="cplusplus18.html#l359"/>
<tocsect4 name="18.10.2.5: Extreme value distribution" url="cplusplus18.html#l360"/>
<tocsect4 name="18.10.2.6: Exponential distribution" url="cplusplus18.html#l361"/>
<tocsect4 name="18.10.2.7: Fisher F distribution" url="cplusplus18.html#l362"/>
<tocsect4 name="18.10.2.8: Gamma distribution" url="cplusplus18.html#l363"/>
<tocsect4 name="18.10.2.9: Geometric distribution" url="cplusplus18.html#l364"/>
<tocsect4 name="18.10.2.10: Log-normal distribution" url="cplusplus18.html#l365"/>
<tocsect4 name="18.10.2.11: Normal distribution" url="cplusplus18.html#l366"/>
<tocsect4 name="18.10.2.12: Negative binomial distribution" url="cplusplus18.html#l367"/>
<tocsect4 name="18.10.2.13: Poisson distribution" url="cplusplus18.html#l368"/>
<tocsect4 name="18.10.2.14: Student t distribution" url="cplusplus18.html#l369"/>
<tocsect4 name="18.10.2.15: Uniform int distribution" url="cplusplus18.html#l370"/>
<tocsect4 name="18.10.2.16: Uniform real distribution" url="cplusplus18.html#l371"/>
<tocsect4 name="18.10.2.17: Weibull distribution" url="cplusplus18.html#l372"/>
</tocsect3>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 19: The STL Generic Algorithms" url="cplusplus19.html#l373">
<tocsect2 name="19.1: The Generic Algorithms" url="cplusplus19.html#l374">
<tocsect3 name="19.1.1: accumulate" url="cplusplus19.html#l375"/>
<tocsect3 name="19.1.2: adjacent_difference" url="cplusplus19.html#l376"/>
<tocsect3 name="19.1.3: adjacent_find" url="cplusplus19.html#l377"/>
<tocsect3 name="19.1.4: binary_search" url="cplusplus19.html#l378"/>
<tocsect3 name="19.1.5: copy" url="cplusplus19.html#l379"/>
<tocsect3 name="19.1.6: copy_backward" url="cplusplus19.html#l380"/>
<tocsect3 name="19.1.7: count" url="cplusplus19.html#l381"/>
<tocsect3 name="19.1.8: count_if" url="cplusplus19.html#l382"/>
<tocsect3 name="19.1.9: equal" url="cplusplus19.html#l383"/>
<tocsect3 name="19.1.10: equal_range" url="cplusplus19.html#l384"/>
<tocsect3 name="19.1.11: fill" url="cplusplus19.html#l385"/>
<tocsect3 name="19.1.12: fill_n" url="cplusplus19.html#l386"/>
<tocsect3 name="19.1.13: find" url="cplusplus19.html#l387"/>
<tocsect3 name="19.1.14: find_end" url="cplusplus19.html#l388"/>
<tocsect3 name="19.1.15: find_first_of" url="cplusplus19.html#l389"/>
<tocsect3 name="19.1.16: find_if" url="cplusplus19.html#l390"/>
<tocsect3 name="19.1.17: for_each" url="cplusplus19.html#l391"/>
<tocsect3 name="19.1.18: generate" url="cplusplus19.html#l392"/>
<tocsect3 name="19.1.19: generate_n" url="cplusplus19.html#l393"/>
<tocsect3 name="19.1.20: includes" url="cplusplus19.html#l394"/>
<tocsect3 name="19.1.21: inner_product" url="cplusplus19.html#l395"/>
<tocsect3 name="19.1.22: inplace_merge" url="cplusplus19.html#l396"/>
<tocsect3 name="19.1.23: iter_swap" url="cplusplus19.html#l397"/>
<tocsect3 name="19.1.24: lexicographical_compare" url="cplusplus19.html#l398"/>
<tocsect3 name="19.1.25: lower_bound" url="cplusplus19.html#l399"/>
<tocsect3 name="19.1.26: max" url="cplusplus19.html#l400"/>
<tocsect3 name="19.1.27: max_element" url="cplusplus19.html#l401"/>
<tocsect3 name="19.1.28: merge" url="cplusplus19.html#l402"/>
<tocsect3 name="19.1.29: min" url="cplusplus19.html#l403"/>
<tocsect3 name="19.1.30: min_element" url="cplusplus19.html#l404"/>
<tocsect3 name="19.1.31: mismatch" url="cplusplus19.html#l405"/>
<tocsect3 name="19.1.32: next_permutation" url="cplusplus19.html#l406"/>
<tocsect3 name="19.1.33: nth_element" url="cplusplus19.html#l407"/>
<tocsect3 name="19.1.34: partial_sort" url="cplusplus19.html#l408"/>
<tocsect3 name="19.1.35: partial_sort_copy" url="cplusplus19.html#l409"/>
<tocsect3 name="19.1.36: partial_sum" url="cplusplus19.html#l410"/>
<tocsect3 name="19.1.37: partition" url="cplusplus19.html#l411"/>
<tocsect3 name="19.1.38: prev_permutation" url="cplusplus19.html#l412"/>
<tocsect3 name="19.1.39: random_shuffle" url="cplusplus19.html#l413"/>
<tocsect3 name="19.1.40: remove" url="cplusplus19.html#l414"/>
<tocsect3 name="19.1.41: remove_copy" url="cplusplus19.html#l415"/>
<tocsect3 name="19.1.42: remove_copy_if" url="cplusplus19.html#l416"/>
<tocsect3 name="19.1.43: remove_if" url="cplusplus19.html#l417"/>
<tocsect3 name="19.1.44: replace" url="cplusplus19.html#l418"/>
<tocsect3 name="19.1.45: replace_copy" url="cplusplus19.html#l419"/>
<tocsect3 name="19.1.46: replace_copy_if" url="cplusplus19.html#l420"/>
<tocsect3 name="19.1.47: replace_if" url="cplusplus19.html#l421"/>
<tocsect3 name="19.1.48: reverse" url="cplusplus19.html#l422"/>
<tocsect3 name="19.1.49: reverse_copy" url="cplusplus19.html#l423"/>
<tocsect3 name="19.1.50: rotate" url="cplusplus19.html#l424"/>
<tocsect3 name="19.1.51: rotate_copy" url="cplusplus19.html#l425"/>
<tocsect3 name="19.1.52: search" url="cplusplus19.html#l426"/>
<tocsect3 name="19.1.53: search_n" url="cplusplus19.html#l427"/>
<tocsect3 name="19.1.54: set_difference" url="cplusplus19.html#l428"/>
<tocsect3 name="19.1.55: set_intersection" url="cplusplus19.html#l429"/>
<tocsect3 name="19.1.56: set_symmetric_difference" url="cplusplus19.html#l430"/>
<tocsect3 name="19.1.57: set_union" url="cplusplus19.html#l431"/>
<tocsect3 name="19.1.58: sort" url="cplusplus19.html#l432"/>
<tocsect3 name="19.1.59: stable_partition" url="cplusplus19.html#l433"/>
<tocsect3 name="19.1.60: stable_sort" url="cplusplus19.html#l434"/>
<tocsect3 name="19.1.61: swap" url="cplusplus19.html#l435"/>
<tocsect3 name="19.1.62: swap_ranges" url="cplusplus19.html#l436"/>
<tocsect3 name="19.1.63: transform" url="cplusplus19.html#l437"/>
<tocsect3 name="19.1.64: unique" url="cplusplus19.html#l438"/>
<tocsect3 name="19.1.65: unique_copy" url="cplusplus19.html#l439"/>
<tocsect3 name="19.1.66: upper_bound" url="cplusplus19.html#l440"/>
<tocsect3 name="19.1.67: Heap algorithms" url="cplusplus19.html#l441">
<tocsect4 name="19.1.67.1: The `make_heap' function" url="cplusplus19.html#l442"/>
<tocsect4 name="19.1.67.2: The `pop_heap' function" url="cplusplus19.html#l443"/>
<tocsect4 name="19.1.67.3: The `push_heap' function" url="cplusplus19.html#l444"/>
<tocsect4 name="19.1.67.4: The `sort_heap' function" url="cplusplus19.html#l445"/>
<tocsect4 name="19.1.67.5: An example using the heap functions" url="cplusplus19.html#l446"/>
</tocsect3>
</tocsect2>
<tocsect2 name="19.2: STL: More function adaptors" url="cplusplus19.html#l447">
<tocsect3 name="19.2.1: Member function adaptors" url="cplusplus19.html#l448"/>
<tocsect3 name="19.2.2: Adaptable functions" url="cplusplus19.html#l449"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 20: Function Templates" url="cplusplus20.html#l450">
<tocsect2 name="20.1: Defining function templates" url="cplusplus20.html#l451">
<tocsect3 name="20.1.1: Considerations regarding template parameters" url="cplusplus20.html#l452"/>
<tocsect3 name="20.1.2: Late-specified return type" url="cplusplus20.html#l453"/>
</tocsect2>
<tocsect2 name="20.2: Passing arguments by reference (reference wrappers)" url="cplusplus20.html#l454"/>
<tocsect2 name="20.3: Using Local and unnamed types as template arguments" url="cplusplus20.html#l455"/>
<tocsect2 name="20.4: Template parameter deduction" url="cplusplus20.html#l456">
<tocsect3 name="20.4.1: Lvalue transformations" url="cplusplus20.html#l457"/>
<tocsect3 name="20.4.2: Qualification transformations" url="cplusplus20.html#l458"/>
<tocsect3 name="20.4.3: Transformation to a base class" url="cplusplus20.html#l459"/>
<tocsect3 name="20.4.4: The template parameter deduction algorithm" url="cplusplus20.html#l460"/>
<tocsect3 name="20.4.5: Template type contractions" url="cplusplus20.html#l461"/>
</tocsect2>
<tocsect2 name="20.5: Declaring function templates" url="cplusplus20.html#l462">
<tocsect3 name="20.5.1: Instantiation declarations" url="cplusplus20.html#l463"/>
</tocsect2>
<tocsect2 name="20.6: Instantiating function templates" url="cplusplus20.html#l464">
<tocsect3 name="20.6.1: Instantiations: no `code bloat'" url="cplusplus20.html#l465"/>
</tocsect2>
<tocsect2 name="20.7: Using explicit template types" url="cplusplus20.html#l466"/>
<tocsect2 name="20.8: Overloading function templates" url="cplusplus20.html#l467">
<tocsect3 name="20.8.1: An example using overloaded function templates" url="cplusplus20.html#l468"/>
<tocsect3 name="20.8.2: Ambiguities when overloading function templates" url="cplusplus20.html#l469"/>
<tocsect3 name="20.8.3: Declaring overloaded function templates" url="cplusplus20.html#l470"/>
</tocsect2>
<tocsect2 name="20.9: Specializing templates for deviating types" url="cplusplus20.html#l471">
<tocsect3 name="20.9.1: Avoiding too many specializations" url="cplusplus20.html#l472"/>
<tocsect3 name="20.9.2: Declaring specializations" url="cplusplus20.html#l473"/>
<tocsect3 name="20.9.3: Complications when using the insertion operator" url="cplusplus20.html#l474"/>
</tocsect2>
<tocsect2 name="20.10: Static assertions" url="cplusplus20.html#l475"/>
<tocsect2 name="20.11: Numeric limits" url="cplusplus20.html#l476"/>
<tocsect2 name="20.12: Polymorphous wrappers for function objects" url="cplusplus20.html#l477"/>
<tocsect2 name="20.13: Compiling template definitions and instantiations" url="cplusplus20.html#l478"/>
<tocsect2 name="20.14: The function selection mechanism" url="cplusplus20.html#l479"/>
<tocsect2 name="20.15: Determining the template type parameters" url="cplusplus20.html#l480"/>
<tocsect2 name="20.16: SFINAE: Substitution Failure Is Not An Error" url="cplusplus20.html#l481"/>
<tocsect2 name="20.17: Summary of the template declaration syntax" url="cplusplus20.html#l482"/>
</tocsect1>
<tocsect1 name="Chapter 21: Class Templates" url="cplusplus21.html#l483">
<tocsect2 name="21.1: Defining class templates" url="cplusplus21.html#l484">
<tocsect3 name="21.1.1: Constructing the circular queue: CirQue" url="cplusplus21.html#l485"/>
<tocsect3 name="21.1.2: Non-type parameters" url="cplusplus21.html#l486"/>
<tocsect3 name="21.1.3: Member templates" url="cplusplus21.html#l487"/>
<tocsect3 name="21.1.4: CirQue's constructors and member functions" url="cplusplus21.html#l488"/>
<tocsect3 name="21.1.5: Using CirQue objects" url="cplusplus21.html#l489"/>
<tocsect3 name="21.1.6: Default class template parameters" url="cplusplus21.html#l490"/>
<tocsect3 name="21.1.7: Declaring class templates" url="cplusplus21.html#l491"/>
<tocsect3 name="21.1.8: Preventing template instantiations" url="cplusplus21.html#l492"/>
</tocsect2>
<tocsect2 name="21.2: Static data members" url="cplusplus21.html#l493">
<tocsect3 name="21.2.1: Extended use of the keyword `typename'" url="cplusplus21.html#l494"/>
</tocsect2>
<tocsect2 name="21.3: Specializing class templates for deviating types" url="cplusplus21.html#l495">
<tocsect3 name="21.3.1: Example of a class specialization" url="cplusplus21.html#l496"/>
</tocsect2>
<tocsect2 name="21.4: Partial specializations" url="cplusplus21.html#l497">
<tocsect3 name="21.4.1: Intermezzo: some simple matrix algebraic concepts" url="cplusplus21.html#l498"/>
<tocsect3 name="21.4.2: The Matrix class template" url="cplusplus21.html#l499"/>
<tocsect3 name="21.4.3: The MatrixRow partial specialization" url="cplusplus21.html#l500"/>
<tocsect3 name="21.4.4: The MatrixColumn partial specialization" url="cplusplus21.html#l501"/>
<tocsect3 name="21.4.5: The 1x1 matrix: avoid ambiguity" url="cplusplus21.html#l502"/>
</tocsect2>
<tocsect2 name="21.5: Variadic templates" url="cplusplus21.html#l503">
<tocsect3 name="21.5.1: Defining and using variadic templates" url="cplusplus21.html#l504"/>
<tocsect3 name="21.5.2: Perfect forwarding" url="cplusplus21.html#l505">
<tocsect4 name="21.5.2.1: References to references" url="cplusplus21.html#l506"/>
</tocsect3>
<tocsect3 name="21.5.3: The unpack operator" url="cplusplus21.html#l507"/>
<tocsect3 name="21.5.4: Non-type variadic templates" url="cplusplus21.html#l508"/>
</tocsect2>
<tocsect2 name="21.6: Tuples" url="cplusplus21.html#l509"/>
<tocsect2 name="21.7: Computing the return type of function objects" url="cplusplus21.html#l510"/>
<tocsect2 name="21.8: Instantiating class templates" url="cplusplus21.html#l511"/>
<tocsect2 name="21.9: Processing class templates and instantiations" url="cplusplus21.html#l512"/>
<tocsect2 name="21.10: Declaring friends" url="cplusplus21.html#l513">
<tocsect3 name="21.10.1: Non-templates used as friends in templates" url="cplusplus21.html#l514"/>
<tocsect3 name="21.10.2: Templates instantiated for specific types as friends" url="cplusplus21.html#l515"/>
<tocsect3 name="21.10.3: Unbound templates as friends" url="cplusplus21.html#l516"/>
<tocsect3 name="21.10.4: Extended friend declarations" url="cplusplus21.html#l517"/>
</tocsect2>
<tocsect2 name="21.11: Class template derivation" url="cplusplus21.html#l518">
<tocsect3 name="21.11.1: Deriving ordinary classes from class templates" url="cplusplus21.html#l519"/>
<tocsect3 name="21.11.2: Deriving class templates from class templates" url="cplusplus21.html#l520"/>
<tocsect3 name="21.11.3: Deriving class templates from ordinary classes" url="cplusplus21.html#l521"/>
</tocsect2>
<tocsect2 name="21.12: Static Polymorphism" url="cplusplus21.html#l522">
<tocsect3 name="21.12.1: An example of static polymorphism" url="cplusplus21.html#l523"/>
<tocsect3 name="21.12.2: Converting dynamic polymorphic classes to static polymorphic classes" url="cplusplus21.html#l524"/>
<tocsect3 name="21.12.3: Using static polymorphism to avoid reimplementations" url="cplusplus21.html#l525"/>
</tocsect2>
<tocsect2 name="21.13: Class templates and nesting" url="cplusplus21.html#l526"/>
<tocsect2 name="21.14: Constructing iterators" url="cplusplus21.html#l527">
<tocsect3 name="21.14.1: Implementing a `RandomAccessIterator'" url="cplusplus21.html#l528"/>
<tocsect3 name="21.14.2: Implementing a `reverse_iterator'" url="cplusplus21.html#l529"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 22: Advanced Template Use" url="cplusplus22.html#l530">
<tocsect2 name="22.1: Subtleties" url="cplusplus22.html#l531">
<tocsect3 name="22.1.1: Returning types nested under class templates" url="cplusplus22.html#l532"/>
<tocsect3 name="22.1.2: Type resolution for base class members" url="cplusplus22.html#l533"/>
<tocsect3 name="22.1.3: ::template, .template and ->template" url="cplusplus22.html#l534"/>
</tocsect2>
<tocsect2 name="22.2: Template Meta Programming" url="cplusplus22.html#l535">
<tocsect3 name="22.2.1: Values according to templates" url="cplusplus22.html#l536">
<tocsect4 name="22.2.1.1: Converting integral types to types" url="cplusplus22.html#l537"/>
</tocsect3>
<tocsect3 name="22.2.2: Selecting alternatives using templates" url="cplusplus22.html#l538">
<tocsect4 name="22.2.2.1: Defining overloading members" url="cplusplus22.html#l539"/>
<tocsect4 name="22.2.2.2: Class structure as a function of template parameters" url="cplusplus22.html#l540"/>
<tocsect4 name="22.2.2.3: An illustrative example" url="cplusplus22.html#l541"/>
</tocsect3>
<tocsect3 name="22.2.3: Templates: Iterations by Recursion" url="cplusplus22.html#l542"/>
</tocsect2>
<tocsect2 name="22.3: User-defined literals" url="cplusplus22.html#l543"/>
<tocsect2 name="22.4: Template template parameters" url="cplusplus22.html#l544">
<tocsect3 name="22.4.1: Policy classes - I" url="cplusplus22.html#l545"/>
<tocsect3 name="22.4.2: Policy classes - II: template template parameters" url="cplusplus22.html#l546">
<tocsect4 name="22.4.2.1: The destructor of Policy classes" url="cplusplus22.html#l547"/>
</tocsect3>
<tocsect3 name="22.4.3: Structure by Policy" url="cplusplus22.html#l548"/>
</tocsect2>
<tocsect2 name="22.5: Template aliases" url="cplusplus22.html#l549"/>
<tocsect2 name="22.6: Trait classes" url="cplusplus22.html#l550">
<tocsect3 name="22.6.1: Distinguishing class from non-class types" url="cplusplus22.html#l551"/>
<tocsect3 name="22.6.2: Available type traits" url="cplusplus22.html#l552"/>
</tocsect2>
<tocsect2 name="22.7: Using `noexcept' when offering the `strong guarantee'" url="cplusplus22.html#l553"/>
<tocsect2 name="22.8: More conversions to class types" url="cplusplus22.html#l554">
<tocsect3 name="22.8.1: Types to types" url="cplusplus22.html#l555"/>
<tocsect3 name="22.8.2: An empty type" url="cplusplus22.html#l556"/>
<tocsect3 name="22.8.3: Type convertibility" url="cplusplus22.html#l557">
<tocsect4 name="22.8.3.1: Determining inheritance" url="cplusplus22.html#l558"/>
</tocsect3>
</tocsect2>
<tocsect2 name="22.9: Template TypeList processing" url="cplusplus22.html#l559">
<tocsect3 name="22.9.1: The length of a TypeList" url="cplusplus22.html#l560"/>
<tocsect3 name="22.9.2: Searching a TypeList" url="cplusplus22.html#l561"/>
<tocsect3 name="22.9.3: Selecting from a TypeList" url="cplusplus22.html#l562"/>
<tocsect3 name="22.9.4: Prefixing/Appending to a TypeList" url="cplusplus22.html#l563"/>
<tocsect3 name="22.9.5: Erasing from a TypeList" url="cplusplus22.html#l564">
<tocsect4 name="22.9.5.1: Erasing the first occurrence" url="cplusplus22.html#l565"/>
<tocsect4 name="22.9.5.2: Erasing a type by its index" url="cplusplus22.html#l566"/>
<tocsect4 name="22.9.5.3: Erasing all occurrences of a type" url="cplusplus22.html#l567"/>
<tocsect4 name="22.9.5.4: Erasing duplicates" url="cplusplus22.html#l568"/>
</tocsect3>
</tocsect2>
<tocsect2 name="22.10: Using a TypeList" url="cplusplus22.html#l569">
<tocsect3 name="22.10.1: The Wrap and Multi class templates" url="cplusplus22.html#l570"/>
<tocsect3 name="22.10.2: The MultiBase class template" url="cplusplus22.html#l571"/>
<tocsect3 name="22.10.3: Support templates" url="cplusplus22.html#l572"/>
<tocsect3 name="22.10.4: Using Multi" url="cplusplus22.html#l573"/>
</tocsect2>
</tocsect1>
<tocsect1 name="Chapter 23: Concrete Examples" url="cplusplus23.html#l574">
<tocsect2 name="23.1: Using file descriptors with `streambuf' classes" url="cplusplus23.html#l575">
<tocsect3 name="23.1.1: Classes for output operations" url="cplusplus23.html#l576"/>
<tocsect3 name="23.1.2: Classes for input operations" url="cplusplus23.html#l577">
<tocsect4 name="23.1.2.1: Using a one-character buffer" url="cplusplus23.html#l578"/>
<tocsect4 name="23.1.2.2: Using an n-character buffer" url="cplusplus23.html#l579"/>
<tocsect4 name="23.1.2.3: Seeking positions in `streambuf' objects" url="cplusplus23.html#l580"/>
<tocsect4 name="23.1.2.4: Multiple `unget' calls in `streambuf' objects" url="cplusplus23.html#l581"/>
</tocsect3>
<tocsect3 name="23.1.3: Fixed-sized field extraction from istream objects" url="cplusplus23.html#l582">
<tocsect4 name="23.1.3.1: Member functions and example" url="cplusplus23.html#l583"/>
</tocsect3>
</tocsect2>
<tocsect2 name="23.2: The `fork' system call" url="cplusplus23.html#l584">
<tocsect3 name="23.2.1: A basic Fork class" url="cplusplus23.html#l585"/>
<tocsect3 name="23.2.2: Parents and Children" url="cplusplus23.html#l586"/>
<tocsect3 name="23.2.3: Redirection revisited" url="cplusplus23.html#l587"/>
<tocsect3 name="23.2.4: The `Daemon' program" url="cplusplus23.html#l588"/>
<tocsect3 name="23.2.5: The class `Pipe'" url="cplusplus23.html#l589"/>
<tocsect3 name="23.2.6: The class `ParentSlurp'" url="cplusplus23.html#l590"/>
<tocsect3 name="23.2.7: Communicating with multiple children" url="cplusplus23.html#l591">
<tocsect4 name="23.2.7.1: The class `Selector': interface" url="cplusplus23.html#l592"/>
<tocsect4 name="23.2.7.2: The class `Selector': implementation" url="cplusplus23.html#l593"/>
<tocsect4 name="23.2.7.3: The class `Monitor': interface" url="cplusplus23.html#l594"/>
<tocsect4 name="23.2.7.4: The class `Monitor': s_handler" url="cplusplus23.html#l595"/>
<tocsect4 name="23.2.7.5: The class `Monitor': the member `run'" url="cplusplus23.html#l596"/>
<tocsect4 name="23.2.7.6: The class `Monitor': example" url="cplusplus23.html#l597"/>
<tocsect4 name="23.2.7.7: The class `Child'" url="cplusplus23.html#l598"/>
</tocsect3>
</tocsect2>
<tocsect2 name="23.3: Function objects performing bitwise operations" url="cplusplus23.html#l599"/>
<tocsect2 name="23.4: Adding binary operators to classes" url="cplusplus23.html#l600">
<tocsect3 name="23.4.1: Binary operators allowing promotions" url="cplusplus23.html#l601">
</tocsect3>
</tocsect2>
<tocsect2 name="23.5: Range-based for-loops and pointer-ranges" url="cplusplus23.html#l602"/>
<tocsect2 name="23.6: Distinguishing lvalues from rvalues with operator[]()" url="cplusplus23.html#l603"/>
<tocsect2 name="23.7: Implementing a `reverse_iterator'" url="cplusplus23.html#l604"/>
<tocsect2 name="23.8: Using `bisonc++' and `flexc++'" url="cplusplus23.html#l605">
<tocsect3 name="23.8.1: Using `flexc++' to create a scanner" url="cplusplus23.html#l606">
<tocsect4 name="23.8.1.1: The derived class `Scanner'" url="cplusplus23.html#l607"/>
<tocsect4 name="23.8.1.2: The lexical scanner specification file" url="cplusplus23.html#l608"/>
<tocsect4 name="23.8.1.3: Implementing `Scanner'" url="cplusplus23.html#l609"/>
<tocsect4 name="23.8.1.4: Using a `Scanner' object" url="cplusplus23.html#l610"/>
<tocsect4 name="23.8.1.5: Building the program" url="cplusplus23.html#l611"/>
</tocsect3>
<tocsect3 name="23.8.2: Using `bisonc++' and `flexc++'" url="cplusplus23.html#l612">
<tocsect4 name="23.8.2.1: The `bisonc++' specification file" url="cplusplus23.html#l613"/>
<tocsect4 name="23.8.2.2: The `flexc++' specification file" url="cplusplus23.html#l614"/>
<tocsect4 name="23.8.2.3: Building the program" url="cplusplus23.html#l615"/>
</tocsect3>
<tocsect3 name="23.8.3: Bisonc++: using polymorphic semantic values" url="cplusplus23.html#l616">
<tocsect4 name="23.8.3.1: The parser using a polymorphic semantic value type" url="cplusplus23.html#l617"/>
<tocsect4 name="23.8.3.2: Tagging the actual semantic type: the `enum class Tag'" url="cplusplus23.html#l618"/>
<tocsect4 name="23.8.3.3: (Im)mutable semantic data: two base-structs" url="cplusplus23.html#l619"/>
<tocsect4 name="23.8.3.4: Traits of semantic type tags: the `TagTrait' trait class" url="cplusplus23.html#l620"/>
<tocsect4 name="23.8.3.5: Accessing data from derived classes" url="cplusplus23.html#l621"/>
<tocsect4 name="23.8.3.6: The polymorphic base class `SemBase'" url="cplusplus23.html#l622"/>
<tocsect4 name="23.8.3.7: The class template `Semantic', derived from `SemBase'" url="cplusplus23.html#l623"/>
<tocsect4 name="23.8.3.8: Adding new semantic data types" url="cplusplus23.html#l624"/>
<tocsect4 name="23.8.3.9: The parser's semantic value: `spSemBase'" url="cplusplus23.html#l625"/>
<tocsect4 name="23.8.3.10: The parser specification file" url="cplusplus23.html#l626"/>
<tocsect4 name="23.8.3.11: The scanner using a polymorphic semantic value type" url="cplusplus23.html#l627"/>
</tocsect3>
</tocsect2>
</tocsect1>
<tocsect1 name="Index" url="cppindex.html" />
</tdeveloptoc>