# C++ Language
## Preface

This wiki book describes the C++ programming language.
Thank you for reading this wiki book!

## Table of Contents

* Overview
* Preprocessing
** Macros
** Tokenization
** Preprocessing Strings
** Compile-time Constants
** Compile-time Assertions
** Conditional-Compilation
* Namespace
** Namespace Shortcuts
** Nesting
** Splitting across Files
** Named and Unnamed
* Type
** Hungarian Prefixes
** Boolean
** Literals
*** Financial 1000-Markers
*** Binary and Hexadecimal
*** Custom Literals
** Bitwise Representation
*** Ordering of Bytes
*** Negative Value
*** Bit Shifting
*** Non-char Byte
*** Bit Flags
** Max Value
*** Overflow
*** INT_MAX
** Conversion
*** Promoting Small Integers
*** Coercion
*** Casting
** Enumeration
** Shortcuts
*** Templated typedef
*** From Another Variable
*** From Initialization
*** From a return Statement
*** Trailing Return Type
** Variant
*** Any-Variant
*** Templated-Variant
*** Optional-Value
** RTTI: RunTime Type Information
* Variables
** Lifetime and Scope
** Initialization
** Uniform Initialization
** Initialize without Constructor
** Decomposing-Auto
** Define at Same Time as Type
* Indirection
** Pointers
** Typed NULL
** Arrays
** Reference Variables
** Rvalue-References
*** Move-Semantics
*** Moving from this
*** Perfect Forwarding
** Smart Pointers
*** Risk from Raw Pointers
*** Unique Ownership
*** Shared Ownership
*** Ownership Cycle
*** Owning an Array
*** Pointer to Base-Class
*** Returning this
*** Smart Compiler-Temporary
*** Custom Destruction
*** Template-Parameter
* Expressions
** Precedence
** Chain of Assignment
* Program Flow
** Loops
*** Basic Loops
*** Looping over a Collection
** The break Statement
*** A Break in a Nested Loop
*** Fallthrough in a Switch
** Return Value
** Parameters
*** Default Parameter
*** Unused Parameter
*** Variable Number of Parameters
** Function Overloading
*** Discrimination Criteria
*** Across Inheritance
** Function-Pointer
** Deprecating a Function
* Objects
** Accessibility
** Unwanted Compiler-Generated Functions
** Constructors
*** Ordering
*** Initialization by Copy-Constructor
*** Initialization by One-Parameter-Constructor
*** Keeping Default Constructor
*** Delegation within Class
*** Memory Full
*** Placement New
** Destructors
** Const Members
*** Const Data Members
*** Const Member Functions
** Static Members
*** Static Data Members
*** Static Member Functions
** Inheritance
*** Polymorphism Syntax
*** Qualification Syntax
*** Restricted Overriding
*** Multiple Inheritance
** Operator Overloading
** Nested Classes
** Pointer to Members
** Low-Level C Structures
*** Union
*** Flexible-Array-Member
*** Bitfield
* Templates
** Templated-Functions
** Templated-Classes
** Templated-Variables
** Template-Parameters
*** Default Template-Parameters
*** Deducing Template-Parameters
*** Variable Number of Template-Parameters
** Traits
*** Unary Predicate Traits
*** Binary Predicate Traits
*** Array Traits
*** Unary Transform Traits
*** Binary Transform Traits
*** S.F.I.N.A.E. Conditional-Compilation
** Metaprogramming
*** Numeric Template-Parameters
*** Collection of Types
** Concepts
* Error Handling
** Returning an Error Code
** Assertions
** C++ Exception Handling
* Standard Libraries
** C-Runtime
*** Math
**** Basic Math
**** Trigonometry
**** Rational Numbers
**** Complex Numbers
**** Miscellaneous Math
*** Heap Memory
**** Allocation
**** Memory Manipulation
**** Leaks
*** Time
**** Time as a String
**** Precise Time
**** Timespan as CPU Clockticks
*** Basic Algorithms
**** Search
**** Quick Sort
*** Executing a Shell Command
** STL: Standard Template Library
*** Collection Classes
**** Sequence Collections
***** Vector
****** Construction
****** Size
****** Equality
****** Indexing
****** Removing Items
****** Inserting Items
****** Assignment
***** Vector of Bool
***** STL-Array
***** Deque
***** List
***** Forward-List
**** Sorted Collections
***** A Pair as one Item
***** Tuple
***** Map
****** Construction
****** Sort-Class
****** Custom Sort-Class
****** Size
****** Equality
****** Indexing
****** Removing Items
****** Inserting Items
****** Assignment
***** Multimap
***** Set
***** Multiset
***** Hash-Table
*** Iterators
**** Basic Iterators
**** Ranges
**** Insert-Iterators
**** Reverse-Iterators
**** Stream-Iterators
**** Custom Iterators
*** Adapters
**** Stack
**** Queue
**** Binary-Heap
*** Callable-Objects
**** A Function Name as a Value
**** Member Function
**** Implicit Getter-Function
**** Functor
**** Lambda
**** Generic Lambda
**** Binding a new Function
*** Algorithms
**** Usage with a C-Array
**** Querying
***** Counting
***** Searching
***** Accumulating
**** Applying Item-by-Item
***** Processing Item-by-Item
***** Ignoring Prior Values
***** Item-by-Item Combination of Two Collections
**** Modifying
***** Copying
***** Removing
***** Reordering
** Strings
*** Unicode
*** Avoiding Buffer-Overrun
*** Character Categories
*** C-String Manipulation
*** String Class
**** Construction
**** Equality
**** Indexing
**** Inserting Characters
**** Algorithms
*** Casting Numeric Values
**** Number to String
**** String to Number
*** AliasedStrings
*** Regular Expressions
*** Locale
** IOStreams
*** Stringstream
*** Streaming Custom Types
** Filesystem Access
*** Moving and Deleting
*** Directories
*** Binary-Files
*** Formatted I/O
*** Newline-Converted-Files
*** Size of a File
*** Redirecting stdout
*** Pipes
*** Console I/O
*** Streamed I/O
** Multithreading
*** Thread Creation
*** Critical Section
*** Atomic Values
*** Locks
*** Events
*** Return Value
*** Semaphores
**** Resource Management
**** Fragment Ordering
**** Ring Buffer
**** Readers and Writers
*** Monitors and Channels
** RNG: Random Number Generator
* Obsolete Features
** Trigraph Characters
** An Obsolete Smart Pointer
** Variadics before ANSI
** Obsolete Function Binding
** Boost Feature Graduation
Guidelines for Editors