<!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>
