c_plus_plus_20_for_programmers_table_of_contents

C++20 for Programmers Table of Contents

Return to C Plus Plus 20 for Programmers | C++20 for Programmers, C Plus Plus | C++

Contents

Preface

Before You Begin

1 Intro and Test-Driving Popular, Free CPP Compilers

1.1 CPP Introduction

1.2 Test-Driving a CPP20 Application

1.2.1 CPP Compiling and CPP Running a CPP20 Application with CPP Visual Studio 2022 Community Edition on Windows

1.2.2 Compiling and Running a CPP20 Application with CPP Xcode on CPP macOS

1.2.3 Compiling and Running a CPP20 Application with GNU CPP on CPP Linux

1.2.4 Compiling and Running a CPP20 Application with CPP gpp (G Plus Plus ]] | g++ in the GCC Docker Container

1.2.5 Compiling and Running a CPP20 Application with CPP clang++ in a CPP Docker Container

1.3 Moore’s Law, CPP Multi-Core Processors and CPP Concurrent Programming

1.4 A Brief Refresher on CPP Object Orientation

1.5 Wrap-Up

2 Intro to CPP20 Programming

2.1 Introduction

2.2 First Program in CPP: Displaying a Line of Text

2.3 Modifying Our First CPP Program

2.4 Another CPP Program: Adding CPP Integers

2.5 CPP Arithmetic

2.6 CPP Decision Making: CPP Equality Operators and CPP Relational Operators

2.7 Objects Natural: Creating and Using CPP Objects of CPP Standard-Library Class CPP string

2.8 Wrap-Up

3 CPP Control Statements: Part 1

3.1 CPP Introduction

3.2 CPP Control Structures

3.2.1 CPP Sequence Structure

3.2.2 CPP Selection Statements

3.2.3 CPP Iteration Statements

3.2.4 CPP Summary of Control Statements

3.3 CPP if Single-Selection Statement

3.4 CPP if…else Double-Selection Statement

3.4.1 CPP Nested if…else Statements

3.4.2 CPP Blocks

3.4.3 CPP Conditional Operator (?:)

3.5 CPP while Iteration Statement

3.6 CPP Counter-Controlled Iteration

3.6.1 CPP Implementing Counter-Controlled Iteration

3.6.2 CPP Integer Division and CPP Truncation

3.7 CPP Sentinel-Controlled Iteration

3.7.1 CPP Implementing Sentinel-Controlled Iteration

3.7.2 CPP Converting Between Fundamental Types Explicitly and Implicitly

3.7.3 CPP Formatting Floating-Point Numbers

3.8 CPP Nested Control Statements

3.8.1 CPP Problem Statement

3.8.2 Implementing the Program

3.8.3 Preventing CPP Narrowing Conversions with CPP Braced Initialization

3.9 CPP Compound Assignment Operators

3.10 CPP Increment Operators and CPP Decrement Operators

3.11 CPP Fundamental Types Are Not CPP Portable

3.12 CPP Objects-Natural Case Study: CPP Arbitrary-Sized Integers

3.13 CPP20: CPP Text Formatting with CPP Function format

3.14 Wrap-Up

4 CPP Control Statements: Part 2

4.1 Introduction

4.2 Essentials of CPP Counter-Controlled Iteration

4.3 CPP for Iteration Statement

4.4 Examples Using the CPP for Statement

4.5 Application: CPP Summing Even Integers

4.6 Application: CPP Compound-Interest Calculations

4.7 CPP do…while Iteration Statement

4.8 CPP switch Multiple-Selection Statement

4.9 CPP17 Selection Statements with Initializers

4.10 CPP break and CPP continue Statements

4.11 CPP Logical Operators

4.11.1 CPP Logical AND (&&) Operator

4.11.2 CPP Logical OR (]] | c_plus_plus_20_for_programmers_table_of_contents | ) Operator 4.11.3 [[CPP Short-Circuit Evaluation

4.11.4 CPP Logical Negation (!) Operator

4.11.5 Example: Producing Logical-Operator Truth Tables

4.12 Confusing the CPP Equality Operator (==) and CPP Assignment Operator (=)

4.13 CPP Objects-Natural Case Study: Using the CPP miniz-cpp Library to CPP Write and Read ZIP files

4.14 CPP20 Text Formatting with Field Widths and Precisions

4.15 Wrap-Up

5 CPP Functions and an Intro to CPP Function Templates

5.1 Introduction

5.2 CPP Program Components

5.3 CPP Math Library Functions

5.4 CPP Function Definitions and CPP Function Prototypes

5.5 CPP Order of Evaluation of a Function’s Arguments

5.6 Function-Prototype and Argument-Coercion Notes

5.6.1 Function Signatures and Function Prototypes

5.6.2 Argument Coercion

5.6.3 Argument-Promotion Rules and Implicit Conversions

5.7 CPP Standard Library Headers

5.8 Case Study: Random-Number Generation

5.8.1 Rolling a Six-Sided Die

5.8.2 Rolling a Six-Sided Die 60,000,000 Times

5.8.3 Seeding the Random-Number Generator

5.8.4 Seeding the Random-Number Generator with random_device

5.9 Case Study: Game of Chance; Introducing Scoped enums

5.10 Scope Rules

5.11 Inline Functions

5.12 References and Reference Parameters

5.13 Default Arguments

5.14 Unary Scope Resolution Operator

5.15 Function Overloading

5.16 Function Templates

5.17 Recursion

5.18 Example Using Recursion: Fibonacci Series

5.19 Recursion vs. Iteration

5.20 Lnfylun Lhqtomh Wjtz Qarcv: Qjwazkrplm xzz Xndmwwqhlz

5.21 Wrap-Up

6 arrays, vectors, Ranges and Functional-Style Programming

6.1 Introduction

6.2 arrays

6.3 Declaring arrays

6.4 Initializing array Elements in a Loop

6.5 Initializing an array with an Initializer List

6.6 CPP11 Range-Based for and CPP20 Range-Based for with Initializer

6.7 Calculating array Element Values and an Intro to constexpr

6.8 Totaling array Elements

6.9 Using a Primitive Bar Chart to Display array Data Graphically

6.10 Using array Elements as Counters

6.11 Using arrays to Summarize Survey Results

6.12 Sorting and Searching arrays

6.13 Multidimensional arrays

6.14 Intro to Functional-Style Programming

6.14.1 What vs. How

6.14.2 Passing Functions as Arguments to Other Functions: Introducing Lambda Expressions

6.14.3 Filter, Map and Reduce: Intro to CPP20’s Ranges Library

6.15 Objects-Natural Case Study: CPP Standard Library Class Template vector

6.16 Wrap-Up

7 (Downplaying) Pointers in Modern CPP

7.1 Introduction

7.2 Pointer Variable Declarations and Initialization

7.2.1 Declaring Pointers

7.2.2 Initializing Pointers

7.2.3 Null Pointers Before CPP11

7.3 Pointer Operators

7.3.1 Address (&) Operator

7.3.2 Indirection (*) Operator

7.3.3 Using the Address (&) and Indirection (*) Operators

7.4 Pass-by-Reference with Pointers

7.5 Built-In Arrays

7.5.1 Declaring and Accessing a Built-In Array

7.5.2 Initializing Built-In Arrays

7.5.3 Passing Built-In Arrays to Functions

7.5.4 Declaring Built-In Array Parameters

7.5.5 CPP11 Standard Library Functions begin and end

7.5.6 Built-In Array Limitations

7.6 Using CPP20 to_array to Convert a Built-In Array to a std::array

7.7 Using const with Pointers and the Data Pointed To

7.7.1 Using a Nonconstant Pointer to Nonconstant Data

7.7.2 Using a Nonconstant Pointer to Constant Data

7.7.3 Using a Constant Pointer to Nonconstant Data

7.7.4 Using a Constant Pointer to Constant Data

7.8 sizeof Operator

7.9 Pointer Expressions and Pointer Arithmetic

7.9.1 Adding Integers to and Subtracting Integers from Pointers

7.9.2 Subtracting One Pointer from Another

7.9.3 Pointer Assignment

7.9.4 Cannot Dereference a void*

7.9.5 Comparing Pointers

7.10 Objects-Natural Case Study: CPP20 spans—Views of Contiguous Container Elements

7.11 A Brief Intro to Pointer-Based Strings

7.11.1 Command-Line Arguments

7.11.2 Revisiting CPP20’s to_array Function

7.12 Looking Ahead to Other Pointer Topics

7.13 Wrap-Up

8 strings, string_views, Text Files, CSV Files and Regex

8.1 Introduction

8.2 CPP string Assignment and CPP string Concatenation

8.3 Comparing strings

8.4 Substrings

8.5 Swapping strings

8.6 string Characteristics

8.7 Finding Substrings and Characters in a string

8.8 Replacing and Erasing Characters in a string

8.9 Inserting Characters into a string

8.10 CPP11 Numeric Conversions

8.11 CPP17 string_view

8.12 Files and Streams

8.13 Creating a Sequential File

8.14 Reading Data from a Sequential File

8.15 CPP14 Reading and Writing Quoted Text

8.16 Updating Sequential Files

8.17 String Stream Processing

8.18 Raw String Literals

8.19 Objects-Natural Case Study: Reading and Analyzing a CSV File Containing Titanic Disaster Data

8.19.1 Using rapidcsv to Read the Contents of a CSV File

8.19.2 Reading and Analyzing the Titanic Disaster Dataset

8.20 Objects-Natural Case Study: Intro to Regular Expressions

8.20.1 Matching Complete Strings to Patterns

8.20.2 Replacing Substrings

8.20.3 Searching for Matches

8.21 Wrap-Up

9 Custom Classes

9.1 Introduction

9.2 Test-Driving an Account Object

9.3 Account Class with a Data Member and Set and Get Member Functions

9.3.1 Class Definition

9.3.2 Access Specifiers private and public

9.4 Account Class: Custom Constructors

9.5 Software Engineering with Set and Get Member Functions

9.6 Account Class with a Balance

9.7 Time Class Case Study: Separating Interface from Implementation

9.7.1 Interface of a Class

9.7.2 Separating the Interface from the Implementation

9.7.3 Class Definition

9.7.4 Member Functions

9.7.5 Including the Class Header in the Source-Code File

9.7.6 Scope Resolution Operator (::)

9.7.7 Member Function setTime and Throwing Exceptions

9.7.8 Member Functions to24HourString and to12HourString

9.7.9 Implicitly Inlining Member Functions

9.7.10 Member Functions vs. Global Functions

9.7.11 Using Class Time

9.7.12 Object Size

9.8 Compilation and Linking Process

9.9 Class Scope and Accessing Class Members

9.10 Access Functions and Utility Functions

9.11 Time Class Case Study: Constructors with Default Arguments

9.11.1 Class Time

9.11.2 Overloaded Constructors and CPP11 Delegating Constructors

9.12 Destructors

9.13 When Constructors and Destructors Are Called

9.14 Time Class Case Study: A Subtle Trap —Returning a Reference or a Pointer to a private Data Member

9.15 Default Assignment Operator

9.16 const Objects and const Member Functions

9.17 Composition: Objects as Members of Classes

9.18 friend Functions and friend Classes

9.19 The this Pointer

9.19.1 Implicitly and Explicitly Using the this Pointer to Access an Object’s Data Members

9.19.2 Using the this Pointer to Enable Cascaded Function Calls

9.20 static Class Members: Classwide Data and Member Functions

9.21 Aggregates in CPP20

9.21.1 Initializing an Aggregate

9.21.2 CPP20: Designated Initializers

9.22 Objects-Natural Case Study: Serialization with JSON

9.22.1 Serializing a vector of Objects Containing public Data

9.22.2 Serializing a vector of Objects Containing private Data

9.23 Wrap-Up

10 OOP: Inheritance and Runtime Polymorphism

10.1 Introduction

10.2 Base Classes and Derived Classes

10.2.1 CommunityMember Class Hierarchy

10.2.2 Shape Class Hierarchy and public Inheritance

10.3 Relationship Between Base and Derived Classes

10.3.1 Creating and Using a SalariedEmployee Class

10.3.2 Creating a SalariedEmployee–SalariedCommissionEmployee Inheritance Hierarchy

10.4 Constructors and Destructors in Derived Classes

10.5 Intro to Runtime Polymorphism: Polymorphic Video Game

10.6 Relationships Among Objects in an Inheritance Hierarchy

10.6.1 Invoking Base-Class Functions from Derived-Class Objects

10.6.2 Aiming Derived-Class Pointers at Base-Class Objects

10.6.3 Derived-Class Member-Function Calls via Base-Class Pointers

10.7 Virtual Functions and Virtual Destructors

10.7.1 Why virtual Functions Are Useful

10.7.2 Declaring virtual Functions

10.7.3 Invoking a virtual Function

10.7.4 virtual Functions in the SalariedEmployee Hierarchy

10.7.5 virtual Destructors

10.7.6 final Member Functions and Classes

10.8 Abstract Classes and Pure virtual Functions

10.8.1 Pure virtual Functions

10.8.2 Device Drivers: Polymorphism in Operating Systems

10.9 Case Study: Payroll System Using Runtime Polymorphism

10.9.1 Creating Abstract Base Class Employee

10.9.2 Creating Concrete Derived Class SalariedEmployee

10.9.3 Creating Concrete Derived Class CommissionEmployee

10.9.4 Demonstrating Runtime Polymorphic Processing

10.10 Runtime Polymorphism, Virtual Functions and Dynamic Binding “Under the Hood“

10.11 Non-Virtual Interface (NVI) Idiom

10.12 Program to an Interface, Not an Implementation

10.12.1 Rethinking the Employee Hierarchy—CompensationModel Interface

10.12.2 Class Employee

10.12.3 CompensationModel Implementations

10.12.4 Testing the New Hierarchy

10.12.5 Dependency Injection Design Benefits

10.13 Runtime Polymorphism with std::variant and std::visit

10.14 Multiple Inheritance

10.14.1 Diamond Inheritance

10.14.2 Eliminating Duplicate Subobjects with virtual Base-Class Inheritance

10.15 protected Class Members: A Deeper Look

10.16 public, protected and private Inheritance

10.17 More Runtime Polymorphism Techniques; Compile-Time Polymorphism

10.17.1 Other Runtime Polymorphism Techniques

10.17.2 Compile-Time (Static) Polymorphism Techniques

10.17.3 Other Polymorphism Concepts

10.18 Wrap-Up

11 Operator Overloading, Copy/Move Semantics and Smart Pointers

11.1 Introduction

11.2 Using the Overloaded Operators of Standard Library Class string

11.3 Operator Overloading Fundamentals

11.3.1 Operator Overloading Is Not Automatic

11.3.2 Operators That Cannot Be Overloaded

11.3.3 Operators That You Do Not Have to Overload

11.3.4 Rules and Restrictions on Operator Overloading

11.4 (Downplaying) Dynamic Memory Management with new and delete

11.5 Modern CPP Dynamic Memory Management: RAII and Smart Pointers

11.5.1 Smart Pointers

11.5.2 Demonstrating unique_ptr

11.5.3 unique_ptr Ownership

11.5.4 unique_ptr to a Built-In Array

11.6 MyArray Case Study: Crafting a Valuable Class with Operator Overloading

11.6.1 Special Member Functions

11.6.2 Using Class MyArray

11.6.3 MyArray Class Definition

11.6.4 Constructor That Specifies a MyArray’s Size

11.6.5 CPP11 Passing a Braced Initializer to a Constructor

11.6.6 Copy Constructor and Copy Assignment Operator

11.6.7 Move Constructor and Move Assignment Operator

11.6.8 Destructor

11.6.9 toString and size Functions

11.6.10 Overloading the Equality (==) and Inequality (!=) Operators

11.6.11 Overloading the Subscript ([]) Operator

11.6.12 Overloading the Unary bool Conversion Operator

11.6.13 Overloading the Preincrement Operator

11.6.14 Overloading the Postincrement Operator

11.6.15 Overloading the Addition Assignment Operator (+=)

11.6.16 Overloading the Binary Stream Extraction (») and Stream Insertion («) Operators

11.6.17 friend Function swap

11.7 CPP20 Three-Way Comparison Operator (⇔)

11.8 Converting Between Types

11.9 explicit Constructors and Conversion Operators

11.10 Overloading the Function Call Operator ()

11.11 Wrap-Up

12 Exceptions and a Look Forward to Contracts

12.1 Introduction

12.2 Exception-Handling Flow of Control

12.2.1 Defining an Exception Class to Represent the Type of Problem That Might Occur

12.2.2 Demonstrating Exception Handling

12.2.3 Enclosing Code in a try Block

12.2.4 Defining a catch Handler for DivideByZeroExceptions

12.2.5 Termination Model of Exception Handling

12.2.6 Flow of Control When the User Enters a Nonzero Denominator

12.2.7 Flow of Control When the User Enters a Zero Denominator

12.3 Exception Safety Guarantees and noexcept

12.4 Rethrowing an Exception

12.5 Stack Unwinding and Uncaught Exceptions

12.6 When to Use Exception Handling

12.6.1 assert Macro

12.6.2 Failing Fast

12.7 Constructors, Destructors and Exception Handling

12.7.1 Throwing Exceptions from Constructors

12.7.2 Catching Exceptions in Constructors via Function try Blocks

12.7.3 Exceptions and Destructors: Revisiting noexcept(false)

12.8 Processing new Failures

12.8.1 new Throwing bad_alloc on Failure

12.8.2 new Returning nullptr on Failure

12.8.3 Handling new Failures Using Function set_new_handler

12.9 Standard Library Exception Hierarchy

12.10 CPP’s Alternative to the finally Block: Resource Acquisition Is Initialization (RAII)

12.11 Some Libraries Support Both Exceptions and Error Codes

12.12 Logging

12.13 Looking Ahead to Contracts

12.14 Wrap-Up

13 Standard Library Containers and Iterators

13.1 Introduction

13.2 Introduction to Containers

13.2.1 Common Nested Types in Sequence and Associative Containers

13.2.2 Common Container Member and Non-Member Functions

13.2.3 Requirements for Container Elements

13.3 Working with Iterators

13.3.1 Using istream_iterator for Input and ostream_iterator for Output

13.3.2 Iterator Categories

13.3.3 Container Support for Iterators

13.3.4 Predefined Iterator Type Names

13.3.5 Iterator Operators

13.4 A Brief Introduction to Algorithms

13.5 Sequence Containers

13.6 vector Sequence Container

13.6.1 Using vectors and Iterators

13.6.2 vector Element-Manipulation Functions

13.7 list Sequence Container

13.8 deque Sequence Container

13.9 Associative Containers

13.9.1 multiset Associative Container

13.9.2 set Associative Container

13.9.3 multimap Associative Container

13.9.4 map Associative Container

13.10 Container Adaptors

13.10.1 stack Adaptor

13.10.2 queue Adaptor

13.10.3 priority_queue Adaptor

13.11 bitset Near Container

13.12 Optional: A Brief Intro to Big O

13.13 Optional: A Brief Intro to Hash Tables

13.14 Wrap-Up

14 Standard Library Algorithms and CPP20 Ranges & Views

14.1 Introduction

14.2 Algorithm Requirements: CPP20 Concepts

14.3 Lambdas and Algorithms

14.4 Algorithms

14.4.1 fill, fill_n, generate and generate_n

14.4.2 equal, mismatch and lexicographical_compare

14.4.3 remove, remove_if, remove_copy and remove_copy_if

14.4.4 replace, replace_if, replace_copy and replace_copy_if

14.4.5 Shuffling, Counting, and Minimum and Maximum Element Algorithms

14.4.6 Searching and Sorting Algorithms

14.4.7 swap, iter_swap and swap_ranges

14.4.8 copy_backward, merge, unique, reverse, copy_if and copy_n

14.4.9 inplace_merge, unique_copy and reverse_copy

14.4.10 Set Operations

14.4.11 lower_bound, upper_bound and equal_range

14.4.12 min, max and minmax

14.4.13 Algorithms gcd, lcm, iota, reduce and partial_sum from Header <numeric>

14.4.14 Heapsort and Priority Queues

14.5 Function Objects (Functors)

14.6 Projections

14.7 CPP20 Views and Functional-Style Programming

14.7.1 Range Adaptors

14.7.2 Working with Range Adaptors and Views

14.8 Intro to Parallel Algorithms

14.9 Standard Library Algorithm Summary

14.10 A Look Ahead to CPP23 Ranges

14.11 Wrap-Up

15 Templates, CPP20 Concepts and Metaprogramming

15.1 Introduction

15.2 Custom Class Templates and Compile-Time Polymorphism

15.3 CPP20 Function Template Enhancements

15.3.1 CPP20 Abbreviated Function Templates

15.3.2 CPP20 Templated Lambdas

15.4 CPP20 Concepts: A First Look

15.4.1 Unconstrained Function Template multiply

15.4.2 Constrained Function Template with a CPP20 Concepts requires Clause

15.4.3 CPP20 Predefined Concepts

15.5 Type Traits

15.6 CPP20 Concepts: A Deeper Look

15.6.1 Creating a Custom Concept

15.6.2 Using a Concept

15.6.3 Using Concepts in Abbreviated Function Templates

15.6.4 Concept-Based Overloading

15.6.5 requires Expressions

15.6.6 CPP20 Exposition-Only Concepts

15.6.7 Techniques Before CPP20 Concepts: SFINAE and Tag Dispatch

15.7 Testing CPP20 Concepts with static_assert

15.8 Creating a Custom Algorithm

15.9 Creating a Custom Container and Iterators

15.9.1 Class Template ConstIterator

15.9.2 Class Template Iterator

15.9.3 Class Template MyArray

15.9.4 MyArray Deduction Guide for Braced Initialization

15.9.5 Using MyArray and Its Custom Iterators with std::ranges Algorithms

15.10 Default Arguments for Template Type Parameters

15.11 Variable Templates

15.12 Variadic Templates and Fold Expressions

15.12.1 tuple Variadic Class Template

15.12.2 Variadic Function Templates and an Intro to CPP17 Fold Expressions

15.12.3 Types of Fold Expressions

15.12.4 How Unary-Fold Expressions Apply Their Operators

15.12.5 How Binary-Fold Expressions Apply Their Operators

15.12.6 Using the Comma Operator to Repeatedly Perform an Operation

15.12.7 Constraining Parameter Pack Elements to the Same Type

15.13 Template Metaprogramming

15.13.1 CPP Templates Are Turing Complete

15.13.2 Computing Values at Compile-Time

15.13.3 Conditional Compilation with Template Metaprogramming and constexpr if

15.13.4 Type Metafunctions

15.14 Wrap-Up

16 CPP20 Modules: Large-Scale Development

16.1 Introduction

16.2 Compilation and Linking Before CPP20

16.3 Advantages and Goals of Modules

16.4 Example: Transitioning to Modules—Header Units

16.5 Modules Can Reduce Translation Unit Sizes and Compilation Times

16.6 Example: Creating and Using a Module

16.6.1 module Declaration for a Module Interface Unit

16.6.2 Exporting a Declaration

16.6.3 Exporting a Group of Declarations

16.6.4 Exporting a namespace

16.6.5 Exporting a namespace Member

16.6.6 Importing a Module to Use Its Exported Declarations

16.6.7 Example: Attempting to Access Non-Exported Module Contents

16.7 Global Module Fragment

16.8 Separating Interface from Implementation

16.8.1 Example: Module Implementation Units

16.8.2 Example: Modularizing a Class

16.8.3 :private Module Fragment

16.9 Partitions

16.9.1 Example: Module Interface Partition Units

16.9.2 Module Implementation Partition Units

16.9.3 Example: “Submodules” vs. Partitions

16.10 Additional Modules Examples

16.10.1 Example: Importing the CPP Standard Library as Modules

16.10.2 Example: Cyclic Dependencies Are Not Allowed

16.10.3 Example: imports Are Not Transitive

16.10.4 Example: Visibility vs. Reachability

16.11 Migrating Code to Modules

16.12 Future of Modules and Modules Tooling

16.13 Wrap-Up

17 Parallel Algorithms and Concurrency: A High-Level View

17.1 Introduction

17.2 Standard Library Parallel Algorithms (CPP17)

17.2.1 Example: Profiling Sequential and Parallel Sorting Algorithms

17.2.2 When to Use Parallel Algorithms

17.2.3 Execution Policies

17.2.4 Example: Profiling Parallel and Vectorized Operations

17.2.5 Additional Parallel Algorithm Notes

17.3 Multithreaded Programming

17.3.1 Thread States and the Thread Life Cycle

17.3.2 Deadlock and Indefinite Postponement

17.4 Launching Tasks with std::jthread

17.4.1 Defining a Task to Perform in a Thread

17.4.2 Executing a Task in a jthread

17.4.3 How jthread Fixes thread

17.5 Producer–Consumer Relationship: A First Attempt

17.6 Producer–Consumer: Synchronizing Access to Shared Mutable Data

17.6.1 Class SynchronizedBuffer: Mutexes, Locks and Condition Variables

17.6.2 Testing SynchronizedBuffer

17.7 Producer–Consumer: Minimizing Waits with a Circular Buffer

17.8 Readers and Writers

17.9 Cooperatively Canceling jthreads

17.10 Launching Tasks with std::async

17.11 Thread-Safe, One-Time Initialization

17.12 A Brief Introduction to Atomics

17.13 Coordinating Threads with CPP20 Latches and Barriers

17.13.1 CPP20 std::latch

17.13.2 CPP20 std::barrier

17.14 CPP20 Semaphores

17.15 CPP23: A Look to the Future of CPP Concurrency

17.15.1 Parallel Ranges Algorithms

17.15.2 Concurrent Containers

17.15.3 Other Concurrency-Related Proposals

17.16 Wrap-Up

18 CPP20 Coroutines

18.1 Introduction

18.2 Coroutine Support Libraries

18.3 Installing the concurrencpp and generator Libraries

18.4 Creating a Generator Coroutine with co_yield and the generator Library

18.5 Launching Tasks with concurrencpp

18.6 Creating a Coroutine with co_await and co_return

18.7 Low-Level Coroutines Concepts

18.8 CPP23 Coroutines Enhancements

18.9 Wrap-Up

A Operator Precedence and Grouping

B Character Set

Index

Online Chapters and Appendices

19 Stream I/O and CPP20 Text Formatting

20 Other Topics and a Look Toward CPP23

C Number Systems

D Preprocessor

E Bit Manipulation

Fair Use Sources

CPP ABI (Application Binary Interface), CPP ABO (Asymmetric Binary Operation) , CPP Abstract Base Class, CPP Access Specifier, CPP Accumulate Algorithm, CPP Adapter Class, CPP Adaptive Composite Pattern, CPP Address Sanitizer, CPP Aggregate Initialization, CPP Aggregation Relationship, CPP Alignment Requirement, CPP Aligned Allocation, CPP Aligned Deallocation, CPP Aligned Storage, CPP Alignment-Support Types, CPP Allocator Adaptor, CPP Allocator Requirement, CPP Allocator-Aware Container, CPP Allocator-Extended Constructor, CPP Allocator-Extended Move Constructor, CPP Allocator-Extended Swap, CPP Allocation Function, CPP Allowable Exception Specification, CPP ALPHA Conversion (Renaming of Bound Variables), CPP Alternative Token, CPP Analysis-Based Optimization, CPP And Keyword, CPP And_Eq Keyword, CPP Angle Bracket Inclusion, CPP Anonymous Namespace, CPP Anti-Unification, CPP API Bindings for [[CPP Libraries]], CPP Argument Dependent Lookup, CPP Argument Pack, CPP Argument Unpacking, CPP Array Decay, CPP Array New Expression, CPP Array-Bound Safe Function, CPP Array-To-Pointer Conversion, CPP Articulated Lvalues, CPP Artificial Dependency Injection, CPP Artificial Instantiation, CPP Assert Macro, CPP Assigned-To Null Pointer Check, CPP AST (Abstract Syntax Tree), CPP AsIf Rule, CPP ASM Keyword, CPP Associated Type, CPP Assumption Hints, CPP Asynchronous Exception, CPP Atomic Compare-And-Exchange Operation, CPP Atomic Constraint, CPP Atomic Flag, CPP Atomic Operations Library, CPP Atomic Relaxed Operation, CPP Atomic Release-Acquire Operation, CPP Atomic Signal Fence, CPP Atomic Strong Compare Exchange, CPP Atomic Weak Compare Exchange, CPP Attribute Namespace, CPP Attribute Syntax, CPP Audit Keyword, CPP Auto Keyword, CPP Automatic Storage Duration, CPP Awaitable Type, CPP Background Thread in [[CPP]], CPP Back-Inserter Iterator, CPP Back-Inserter Iterator Adapter, CPP Backtrace Support, CPP Balanced Binary Tree In [[CPP]], CPP Bandwidth Optimization in [[CPP]], CPP Base Class Subobject, CPP Basic Exception Guarantee, CPP Basic Guarantee, CPP Basic Iostream, CPP Basic IOS, CPP Basic Istream, CPP Basic Ostream, CPP Basic Streambuf, CPP Begin Iterator, CPP Bessel Functions, CPP Bidir Iterator Category, CPP Bidirectional Iterator, CPP Big-O Notation in [[CPP Context]], CPP Binary Compatibility, CPP Binary Literal, CPP Binary Search Algorithm, CPP Binary Tree Implementation Detail, CPP Binding Pattern, CPP Bit Mask Operation, CPP Bit Shift Operation, CPP Bitand Keyword, CPP Bitfield Implementation, CPP Bitor Keyword, CPP Bitset Class, CPP Bitwise Complement, CPP Bitwise Operator Overload, CPP Block Scope, CPP Blocking Function Call, CPP Blocking I/O in [[CPP]], CPP Boilerplate Code Generation, CPP Bool Keyword, CPP Boolean Literal, CPP Brace Initialization, CPP Braced-Init-List, CPP Break Keyword, CPP Bridge Pattern in [[CPP]], CPP Built-In Type, CPP Built-In Function, CPP Built-In Operator, CPP Bundled Header Units, CPP Byte-Wise Operations, CPP Call Once Function, CPP Call Operator, CPP Callable Object, CPP Candidate Function, CPP Capacity Member Function, CPP Capturing Lambda, CPP Case Keyword, CPP Casting Operator Overload, CPP CDECL Calling Convention, CPP CeePlusPlus Language Linkage, CPP Character Literal, CPP Char16_T Keyword, CPP Char32_T Keyword, CPP Char Keyword, CPP Checked Iterators, CPP Chi-Squared Distribution, CPP Circular Buffer Implementation, CPP Class Key, CPP Class Member, CPP Class Scope, CPP Class Template, CPP Class Template Argument Deduction, CPP Class-Scoped Enumeration, CPP Cleanup Function, CPP Client-Side Abstraction, CPP Clocale Header, CPP Close Function for Streams, CPP Code Bloat Minimization, CPP Code Gen Optimization, CPP Code Generation Rule, CPP Code Smell Detection, CPP CoAwait Keyword, CPP CoReturn Keyword, CPP CoYield Keyword, CPP Collateral Class Template Instantiation, CPP Common Reference, CPP Common Type, CPP Compact Exception Model, CPP Compilation Firewalls, CPP Compilation Unit, CPP Complete Object, CPP Complex Number Type, CPP Compound Assignment Operator, CPP Compound Literal, CPP Compound Requirement, CPP Concept Keyword, CPP Concept Map, CPP Concept Predicate, CPP Concrete Type, CPP Conditional Explicit, CPP Conditional Inference, CPP Conditional Operator, CPP Conditional Variable, CPP Conforming Implementation, CPP Conformed Specialization, CPP Conformance Level, CPP Conformance Test Suite, CPP Conjunction Concept, CPP Constant Expression, CPP Constant Initialization, CPP Constant Interval Bound, CPP Const Keyword, CPP Const Member Function, CPP Const Volatile Qualifier, CPP Const_Assert Macro, CPP Consteval Keyword, CPP Constexpr Keyword, CPP Constexpr Constructor, CPP Constexpr Function, CPP Constinit Keyword, CPP Constexpr If Statement, CPP Constraint Expression, CPP Constraint Satisfaction, CPP Constraint_Based Overload Resolution, CPP Constructor Delegation, CPP Constructor Inheritance, CPP Constructor Template, CPP Contextual Conversion, CPP Continue Keyword, CPP Contract Programming, CPP Contravariant Parameter Type, CPP Conversion Function, CPP Conversion Operator, CPP Conversion Sequence, CPP Copy Assignment Operator, CPP Copy Constructor, CPP Copy Ellision, CPP Core Constant Expressions, CPP Core Guidelines, CPP Coroutine Frame, CPP Coroutine Handle, CPP Coroutine State Machine, CPP Coroutine Suspension, CPP Count Algorithm, CPP Covariant Return Type, CPP CRTP (Curiously Recurring Template Pattern), CPP CTAD (Class Template Argument Deduction), CPP CUDA Extensions For [[CPP]], CPP Curly Brace Scope, CPP Custom Deleter in Smart Pointer, CPP Custom Exception, CPP Custom Literal Suffix, CPP Dangling Pointer Detection, CPP Dangling Reference, CPP Data Member Alignment, CPP Data Member Padding, CPP Data Race, CPP Data Segment, CPP Debug Macro, CPP Debug Symbol, CPP Decay Type, CPP Decltype Keyword, CPP Decomposition Declaration, CPP Deduction Guide, CPP Deep Copy, CPP Default Argument, CPP Default Capture, CPP Default Constructor, CPP Default Initialization, CPP Default Member Initializer, CPP Defaulted Function, CPP Defaulted Move Constructor, CPP Deleted Function, CPP Deleter Object, CPP Deletion Overload, CPP Demangled Name, CPP Dependent Base, CPP Dependent Name, CPP Dependent Scope, CPP Dependent Type, CPP Dependent Type Name, CPP Deprecated Attribute, CPP Design Pattern Application, CPP Designated Initializer, CPP Destructor, CPP Device Code in [[CPP Offloading]], CPP Diagnostic Message, CPP Digit Separator, CPP Direct Base Class, CPP Direct Initialization, CPP Directive, CPP Discard Block, CPP Discard Statement, CPP Disjunction Concept, CPP DLL Export, CPP DLL Import, CPP Do Keyword, CPP Do-While Loop, CPP Documented Behavior, CPP Dominance Analysis, CPP Double Keyword, CPP Downcast Operation, CPP Downward Closure, CPP DRY Principle in [[CPP]], CPP Dynamic Allocation, CPP Dynamic Cast Keyword, CPP Dynamic Exception Specification, CPP Dynamic Initialization, CPP Dynamic Linkage, CPP Dynamic Polymorphism, CPP Dynamic Type, CPP Eager Instantiation, CPP EBCDIC Support, CPP Effective Modern [[CPP Book Reference]], CPP Ellipsis Parameter, CPP Empty Base Optimization, CPP Empty Class, CPP Empty Parameter Pack, CPP Enable If Utility, CPP End Iterator, CPP End Of File State, CPP Endl Manipulator, CPP Enumeration Underlying Type, CPP Enumerator, CPP Enum Keyword, CPP Equality Operator, CPP Equivalence Relation, CPP Erased Type, CPP Error Handling Strategy, CPP Error State Indicator, CPP Exception Filter, CPP Exception Guarantee, CPP Exception Handling, CPP Exception Object, CPP Exception Safe Functions, CPP Exception Specification, CPP Exception Translation, CPP Execinfo Integration, CPP Execution Character Set, CPP Execution Policy, CPP Exhaustive Instantiation, CPP Explicit Conversion Operator, CPP Explicit Keyword, CPP Export Keyword, CPP Extern Keyword, CPP External Linkage, CPP External Template, CPP ExternC Linkage, CPP Face-Deletion Operator, CPP False Keyword, CPP Fast Floating-Point Mode, CPP Field Alignment, CPP File Scope, CPP Filebuf Class, CPP Filesystem Directory Iterator, CPP Filesystem Path, CPP Final Specifier, CPP Fixed-Size Array, CPP Fixed-Width Integer, CPP Floating Point Environment, CPP Floating Point Literal, CPP Fold Expression, CPP For Keyword, CPP For Range Loop, CPP Forward Declaration, CPP Forward Iterator, CPP Forward List, CPP Forwarding Reference, CPP Four-Phase Name Lookup, CPP Friend Class, CPP Friend Declaration, CPP Friend Function, CPP Front Insertion Operator, CPP Full Expression, CPP Full Specialization, CPP Function Adapter, CPP Function Call Operator, CPP Function-Like Macro, CPP Function Object, CPP Function Overload, CPP Function Parameter Pack, CPP Function Pointer, CPP Function Template, CPP Function Template Partial Specialization, CPP Function Template Specialization, CPP Garbage Collection Interface, CPP Gcc Extension For [[CPP]], CPP Generalized Constant Expression, CPP Generic Lambda, CPP Generic Programming, CPP Getline Function, CPP Global New Operator, CPP Global Namespace, CPP Global Object, CPP Global Variable, CPP GPU Offloading Support, CPP Greater Comparator, CPP Guaranteed Copy Elision, CPP Guarded Suspension, CPP Half-Open Interval in Iterators, CPP Handler Block, CPP Has Include Preprocessor, CPP Hash Function Object, CPP Heap Allocation, CPP Heuristic Inline, CPP Hidden Friend Idiom, CPP Hidden Implementation Detail, CPP Homogeneous Function Template, CPP Hook Function, CPP I/O Manipulator, CPP I/O State Flag, CPP I/O Stream Buffer, CPP I/O Stream Iterator, CPP If Constexpr, CPP If Keyword, CPP If-Else Chain, CPP Ill-Formed Program, CPP Immediate Function, CPP Implementation-Defined Behavior, CPP Implementation Limit, CPP Import Keyword, CPP Incremental Compilation, CPP Indeterminate Value, CPP Index Sequence, CPP Indirect Call Optimization, CPP Inheritance Chain, CPP Inherited Constructor, CPP Inline Assembly, CPP Inline Keyword, CPP Inline Namespace, CPP Inline Variable, CPP Input Iterator, CPP Integral Constant Expression, CPP Integral Promotion, CPP Integer Division, CPP Integer Literal, CPP Internal Linkage, CPP Intrinsic Function, CPP Invalid Pointer, CPP Invocation Operator, CPP IOS Base, CPP IOS Flags, CPP IOS Format State, CPP IOS Precision, CPP IOS Width, CPP Iostream Synchronization, CPP IPC Mechanisms in [[CPP (Non-OS Generic)]], CPP ISO Standard Committee, CPP IsLiteralType Trait, CPP Iteration Statement, CPP Iterator Adapter, CPP Iterator Category, CPP Iterator Invalidation, CPP Iterator Traits, CPP JIT Compilation for [[CPP]], CPP Just-In-Time Debugging, CPP Key Function, CPP Keyword Recognition, CPP Koenig Lookup, CPP Label Declaration, CPP Lambda Capture, CPP Lambda Closure Type, CPP Lambda Expression, CPP Lambda Introducer, CPP Lambda Object, CPP Language Linkage, CPP Late Template Parsing, CPP Lexical Block, CPP LIFO Semantics, CPP Lifetime Extension of Temporaries, CPP Lifetime Profile, CPP Limit Macro, CPP Link Time Optimization, CPP Linker Script Interaction with [[CPP Symbols]], CPP Linker-Aided Optimization, CPP Linktime Polymorphism, CPP Literal Operator, CPP Literal Suffix, CPP Literal Type, CPP Local Class, CPP Local Static Variable, CPP Lock Guard, CPP Lock-Free Programming, CPP Logic And Operator, CPP Logic Not Operator, CPP Logic Or Operator, CPP Logical Conjunction, CPP Logical Disjunction, CPP Long Double Keyword, CPP Long Keyword, CPP Lookup Rule, CPP Loophole Casting, CPP Low-Level Memory Intrinsics, CPP Lvalue Reference, CPP Lvalue Transformation, CPP Machine Code Generation for [[CPP]], CPP Magic Statics, CPP Magnitude Type, CPP Main Function, CPP Make Shared, CPP Make Unique, CPP Mangling, CPP Map Container, CPP Masked Operation, CPP Maximum Munch Rule, CPP Memento Pattern in [[CPP]], CPP Member Access Operator, CPP Member Initializer List, CPP Member Template, CPP Member Variable Template, CPP Memory Fence, CPP Memory Model, CPP Memory Order, CPP Memory Resource, CPP Metaclasses Proposal, CPP Metaobject Facility, CPP Metaprogramming, CPP MinGW Toolchain, CPP Minimal Perfect Forwarding, CPP Modified UTF-8 Strings in [[CPP Context]], CPP Module Interface Unit, CPP Module Partition, CPP Module Purview, CPP Module Unit, CPP Module-Mapper, CPP Modules TS, CPP Move Assignment Operator, CPP Move Constructor, CPP Move Iterator, CPP Move Semantics, CPP MSVC Extensions, CPP Multiple Inheritance, CPP Multiway Merge, CPP Mutable Keyword, CPP Mutable Lambda, CPP Name Hiding, CPP Name Lookup, CPP Named Requirement, CPP Narrow Character Type, CPP Narrowing Conversion, CPP Namespace Alias, CPP Namespace Keyword, CPP Natvis Debug Visualization, CPP Nested Class, CPP Nested Exception, CPP Nested Lambda, CPP Nested Namespace, CPP Nested Template, CPP New Expression, CPP Nibble Access in Bitset, CPP No Except Keyword, CPP No Return Function, CPP No Unique Address Attribute, CPP Noop Mutex, CPP Normative Reference in Standard, CPP Not Keyword, CPP Not_Eq Keyword, CPP noexcept Operator, CPP Nothrow Guarantee, CPP Null Pointer Constant, CPP Nullptr Keyword, CPP Number Literal, CPP Numeric Limit, CPP ODR (One-Definition Rule), CPP ODR-Use, CPP Opaque Enum Declaration, CPP Open Multi-Methods in [[CPP (Visitor Pattern)]], CPP Operator Delete, CPP Operator Delete[], CPP Operator Function Id, CPP Operator New, CPP Operator New[], CPP Operator Overload, CPP Optional Class Template, CPP Order Statistics Tree (Extension), CPP Ordered Comparison, CPP Ordered Map, CPP Ordered Set, CPP Ordering Category, CPP Ostream Iterator, CPP Out Of Line Definition, CPP Out Parameter Style, CPP Out-Of-Class Member Definition, CPP Output Iterator, CPP Over Alignment Support, CPP Overload Resolution, CPP Overloaded Operator, CPP Overloaded Template, CPP Overriding Function, CPP Package Manager for [[CPP Libraries]], CPP Pair Class Template, CPP Panic Mode Recovery in Parser, CPP Parameter Pack, CPP Parameter Pack Expansion, CPP Parent Class, CPP Partial Ordering of Function Templates, CPP Partial Specialization, CPP Perfect Forwarding, CPP PH (Placeholders) In Templates, CPP Placement Delete, CPP Placement New, CPP Plain Old Data (POD) Type, CPP Pmr Allocator, CPP Pointer Arithmetic, CPP Pointer Decay, CPP Pointer Interconvertibility, CPP Pointer To Member, CPP Polymorphic Allocator, CPP Polymorphic Class, CPP Polymorphic Lambda, CPP Polymorphic Type, CPP Postfix Decrement Operator, CPP Postfix Increment Operator, CPP Precompiled Header, CPP Predefined Macro, CPP Prefix Decrement Operator, CPP Prefix Increment Operator, CPP Preprocessing Directive, CPP Private Base, CPP Private Inheritance, CPP Protected Inheritance, CPP Public Inheritance, CPP Pure Virtual Function, CPP Qualifier Adjustment, CPP Qualified Id, CPP Qualified Lookup, CPP Qualified Name Lookup, CPP Quick_Exit Function, CPP RAII (Resource Acquisition Is Initialization), CPP Random Device, CPP Range Based For Loop, CPP Range Concept, CPP Range-V3 Library Integration, CPP Raw String Literal, CPP Realloc Function Avoidance, CPP Rebind Allocator, CPP Recursion Limit, CPP Redundant Move, CPP Reference Collapsing Rules, CPP Reference Parameter, CPP Reference Wrapper, CPP Reflexpr Keyword, CPP Register Keyword, CPP Regular Type Concept, CPP Reinterpret_Cast Keyword, CPP Relaxed Constraint, CPP Release Mode, CPP Requires Clause, CPP Requires Expression, CPP Requires Keyword, CPP Requirement Body, CPP Requirement Parameter, CPP Resource Leak Detection, CPP Resource Management, CPP Restricted Aliasing, CPP Return Keyword, CPP Return Type Deduction, CPP Reverse Iterator, CPP RIAA (Reverse RAII Approach, Hypothetical), CPP Ring Buffer, CPP RNG (Random Number Generator) Expanded As Random Number Generator, CPP Rule Of Five, CPP Rule Of Three, CPP Runtime Polymorphism, CPP Runtime Type Information, CPP Safe Bool Idiom, CPP Sampling Distribution Function, CPP Sanitizer, CPP Sargable Expression in [[CPP (Hypothetical Term)]], CPP Scalar Replacement of Aggregates, CPP Scenario Testing in [[CPP Unit Tests]], CPP Scope Guard Idiom, CPP Scope Resolution Operator, CPP Scoped Enumeration, CPP Scoped Lock, CPP Scoped Thread, CPP Secondary Template, CPP Segmentation Fault Handling, CPP Selection Statement, CPP Semaphore, CPP Sequence Container, CPP Shallow Copy, CPP Shared Future, CPP Shared Lock, CPP Shared Mutex, CPP Shared Pointer, CPP Short Circuit Evaluation, CPP Short Keyword, CPP Signed Integer Type, CPP Signature (Function), CPP Silent Conversion, CPP Simple Declaration, CPP Single Inheritance, CPP Single Module Unit, CPP Singleton Pattern in [[CPP]], CPP Sized Deallocation, CPP Sized Deallocation Function, CPP Slicing Problem, CPP Slice Array, CPP Smart Pointer, CPP Snowflake Operator (Hypothetical Term), CPP Software Transactional Memory Proposal, CPP Source Code Transformation, CPP Spacer Iterator (Hypothetical Term), CPP Special Member Function, CPP Specialization, CPP SFINAE (Substitution Failure Is Not An Error), CPP Shift Left Operator Overload, CPP Shift Right Operator Overload, CPP Short Lived Object Optimization, CPP Signed Char Type, CPP Signal Handler Invocation, CPP Signature of a Callable, CPP Silent Failure In Templates, CPP Sized Array To Pointer Decay, CPP Slice Iterator (Hypothetical Term), CPP Small Buffer Optimization, CPP Sort Algorithm, CPP Sorting Network Implementation, CPP Source Code Translation Unit, CPP Specialized Allocator, CPP Speculative Load, CPP Spin Lock Implementation, CPP Spurious Wakeup Prevention, CPP SSO (Small String Optimization), CPP Stable Partition, CPP Stack Allocation, CPP Standard Algorithm, CPP Standard Atomic, CPP Standard Backward Compatibility, CPP Standard Basic_String, CPP Standard Bitset, CPP Standard Byte Type, CPP Standard Charconv, CPP Standard Chrono, CPP Standard Codecvt, CPP Standard Compare, CPP Standard Concurrency Support, CPP Standard Condition_Variable, CPP Standard Container Adaptors, CPP Standard Container Erasure, CPP Standard Container Invalidation Rules, CPP Standard Deque, CPP Standard Duration, CPP Standard Dynamic Extent, CPP Standard Execution Policy, CPP Standard Filesystem, CPP Standard Fixed Size Array, CPP Standard Forward_List, CPP Standard Fstream, CPP Standard Function, CPP Standard Future, CPP Standard Hash, CPP Standard Iomanip, CPP Standard Ios, CPP Standard Iostream, CPP Standard Iostream Synchronization, CPP Standard Istream, CPP Standard Iterator, CPP Standard Layout Type, CPP Standard Library, CPP Standard List, CPP Standard Locale, CPP Standard Map, CPP Standard Memory, CPP Standard MultiMap, CPP Standard MultiSet, CPP Standard Mutex, CPP Standard Optional, CPP Standard Ostream, CPP Standard Pair, CPP Standard Priority_Queue, CPP Standard Promise, CPP Standard Queue, CPP Standard Random, CPP Standard Ratio, CPP Standard Raw Storage Iterator, CPP Standard Regex, CPP Standard Relaxed Iterator Concept, CPP Standard Scoped_Allocator_Adaptor, CPP Standard Set, CPP Standard Shared_Future, CPP Standard Shared_Ptr, CPP Standard Span, CPP Standard Stack, CPP Standard Streambuf, CPP Standard String, CPP Standard String_View, CPP Standard System_Error, CPP Standard Template Library (STL), CPP Standard Thread, CPP Standard Tuple, CPP Standard Type Erasure, CPP Standard Type Traits, CPP Standard Unique_Lock, CPP Standard Unique_Ptr, CPP Standard Unordered_Map, CPP Standard Unordered_Multimap, CPP Standard Unordered_Multiset, CPP Standard Unordered_Set, CPP Standard Utility, CPP Standard Valarray, CPP Standard Variant, CPP Standard Vector, CPP Static_assert Keyword, CPP Static Keyword, CPP Static Allocation, CPP Static Cast Keyword, CPP Static Data Member, CPP Static Storage Duration, CPP Storage Class Specifier, CPP Strict Aliasing Rule, CPP String Literal, CPP Stringification Macro, CPP Strong Exception Guarantee, CPP Structured Binding, CPP Subobject, CPP Substitution Failure, CPP Synchronized Pool Resource, CPP Synchronization Primitives, CPP Syntactic Category, CPP SzArray (Hypothetical Term), CPP Template Argument Deduction, CPP Template Class, CPP Template Constrained Function, CPP Template Friend, CPP Template Instantiation, CPP Template Metaprogramming, CPP Template Parameter, CPP Template Parameter Pack Expansion, CPP Template Partial Specialization, CPP Template Specialization, CPP Temporary Materialization, CPP Ternary Operator, CPP This Keyword, CPP Thread Local Keyword, CPP Thread Safe Initialization, CPP Three Way Comparison Operator, CPP Throw Expression, CPP Throw Keyword, CPP Token Concatenation, CPP Token Pasting Operator, CPP Traits Class, CPP Trampoline Function Technique, CPP Translation Unit, CPP Trigraph Sequence, CPP Trivial Class, CPP Trivial Type, CPP True Keyword, CPP Try Keyword, CPP TU (Translation Unit) Expanded As Translation Unit, CPP Type Alias, CPP Type Alias Template, CPP Type Deduction, CPP Type Erasure Idiom, CPP Type Id Expression, CPP Type Parameter Pack, CPP Type Promotion, CPP Type Safe Union, CPP Type Trait, CPP Type Transformation, CPP Type_Safe Enum Idiom, CPP Typename Keyword, CPP Underlying Type, CPP Unicode Literal, CPP Union Keyword, CPP Union Member, CPP Unique Address Optimization, CPP Uninitialized Fill, CPP Uninitialized Memory, CPP Uninitialized Value, CPP Universal Reference, CPP Unnamed Namespace, CPP Unordered Container, CPP Unreachable Code, CPP Unsigned Integer Type, CPP Utility Forward, CPP Value Category, CPP Value Initialization, CPP Variable Template, CPP Variadic Macro, CPP Variadic Template, CPP Vectorization Strategies, CPP Virtual Base Class, CPP Virtual Dispatch, CPP Virtual Function Table (VFT), CPP Virtual Function, CPP Virtual Inheritance, CPP Visible Entity, CPP Visibility Attribute, CPP Volatile Keyword, CPP Wchar_T Keyword, CPP Weak Symbol, CPP Wide Character Literal, CPP Wide String Literal, CPP Wide-Char Stream, CPP Widen Function, CPP Widening Conversion, CPP Working Draft of [[CPP Standard]], CPP Xor Keyword, CPP Xor_Eq Keyword, CPP Zero Initialization

C Plus Plus | C++: Effective CPP | Effective C++, C Plus Plus Best Practices | C++ Best Practices, CPP Core Guidelines (CG) by Bjarne Stroustrup and Herb Sutter | C++ Core Guidelines (CG) by Bjarne Stroustrup and Herb Sutter, C Plus Plus Fundamentals | C++ Fundamentals, C Plus Plus Inventor | C++ Inventor - C Plus Plus Language Designer | C++ Language Designer: Bjarne Stroustrup in 1985; C Plus Plus Keywords | C++ Keywords, CPP Built-In Data Types | C++ Built-In Data Types, C Plus Plus Data Structures | C++ Data Structures (CPP Containers) - C Plus Plus Algorithms | C++ Algorithms, C Plus Plus Syntax | C++ Syntax, C Plus Plus OOP | C++ OOP - C Plus Plus Design Patterns | C++ Design Patterns, Clean C Plus Plus | Clean C++ - C Plus Plus Style Guide | C++ Style Guide - C Plus Plus BDD | C++ BDD, C Plus Plus Standards | C++ Standards (C Plus Plus 23 | C++ 23, C Plus Plus 20 | C++ 20, C Plus Plus 17 | C++ 17, C Plus Plus 14 | C++ 14, C Plus Plus 11 | C++ 11, C Plus Plus 03 | C++ 03, C Plus Plus 98 | C++ 98), Bjarne Stroustrup's C Plus Plus Glossary | Bjarne Stroustrup's C++ Glossary - Glossaire de CCP - French, CppReference.com, CPlusPlus.com, ISOcpp.org, C Plus Plus Compilers | C++ Compilers (Compiler Explorer, MinGW), C Plus Plus IDEs | C++ IDEs, C Plus Plus Development Tools | C++ Development Tools, C Plus Plus Linter | C++ Linter, C Plus Plus Debugging | C++ Debugging, C Plus Plus Modules | C++ Modules (C Plus Plus 20 | C++20), C Plus Plus Packages | C++ Packages, C Plus Plus Package Manager | C++ Package Manager (Conan - the C/C Plus Plus Package Manager | Conan - the C/C++ Package Manager), C Plus Plus Standard Library | C++ Standard Library, C Plus Plus Libraries | C++ Libraries, C Plus Plus Frameworks | C++ Frameworks, C Plus Plus DevOps | C++ DevOps - C Plus Plus SRE | C++ SRE, C Plus Plus CI/CD | C++ CI/CD (C Plus Plus Build Pipeline | C++ Build Pipeline), C Plus Plus Data Science | C++ Data Science - C Plus Plus DataOps | C++ DataOps, C Plus Plus Machine Learning | C++ Machine Learning, C Plus Plus Deep Learning | C++ Deep Learning, Functional C Plus Plus | Functional C++, C Plus Plus Concurrency | C++ Concurrency, C Plus Plus History | C++ History, C Plus Plus Topics | C++ Topics, C Plus Plus Bibliography | C++ Bibliography, Manning CPP Series | Manning C++ Series, C Plus Plus Courses | C++ Courses, CppCon, C Plus Plus Research | C++ Research, C Plus Plus GitHub | C++ GitHub, Written in C Plus Plus | Written in C++, C Plus Plus Popularity | C++ Popularity, C Plus Plus Awesome | C++ Awesome, C Plus Plus Versions | C++ Versions. (navbar_cplusplus – see also navbar_cpp_containers, navbar_cppcon, navbar_cpp_core_guidelines, navbar_cpp23, navbar_cpp20, navbar_cpp17, navbar_cpp14, navbar_cpp11)


Cloud Monk is Retired ( for now). Buddha with you. © 2025 and Beginningless Time - Present Moment - Three Times: The Buddhas or Fair Use. Disclaimers

SYI LU SENG E MU CHYWE YE. NAN. WEI LA YE. WEI LA YE. SA WA HE.


c_plus_plus_20_for_programmers_table_of_contents.txt · Last modified: 2025/02/01 07:13 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki