Exploring C++ 20

by Ray Lischner

This web site contains all the code listings from the book Exploring C++ 20 (Apress). They are divided into two folders as follows:

In each code folder is a subfolder for every chapter. Every chapter folder contains the files for that chapter, including CMakeLists.txt and test scripts. All files use POSIX line endings (newline only).

The data directory contains some additional sample files that you can use as input for some of the exercises,.

To compile the examples, you will need cmake and, of course, a C++ compiler. As of 2020-07-10, no compiler and library implements the full C++ 20 draft standard. The GCC compiler and library are the most complete, and what I used when writing the book.

As of GCC 10.1, libstdc++ provides all the parts of C++ 20 that Exploring C++ 20 requires except for modules and the <format> header. The fmt.dev project implements a functional equivalent, albeit in the fmt namespace. In order to emulate the standard, I wrote my own format header to use the fmt library, although I actually used a smaller, simpler fork, called fmt6.

Except for Exploration 74, the tests rely on the run_test.py Python 3 script, as invoked from CMake tests. Some individual tests are themselves Python 3 scripts.

Download all files in a single ZIP file or compressed TAR file.

ChapterModules and importsFiles and #include
Exploration 1: Honing Your Toolsimport#include
Exploration 2: Reading C++ Codeimport#include
Exploration 3: Integer Expressionsimport#include
Exploration 4: Stringsimport#include
Exploration 5: Simple Inputimport#include
Exploration 6: Error Messagesimport#include
Exploration 7: For Loopsimport#include
Exploration 8: Formatted Outputimport#include
Exploration 9: Arrays and Vectorsimport#include
Exploration 10: Algorithms and Rangesimport#include
Exploration 11: Increment and Decrementimport#include
Exploration 12: Conditions and Logicimport#include
Exploration 13: Compound Statementsimport#include
Exploration 14: Introduction to File I/Oimport#include
Exploration 15: The Map Data Structureimport#include
Exploration 16: Type Synonymsimport#include
Exploration 17: Charactersimport#include
Exploration 18: Character Categoriesimport#include
Exploration 19: Case-Foldingimport#include
Exploration 20: Writing Functionsimport#include
Exploration 21: Function Argumentsimport#include
Exploration 22: Using Rangesimport#include
Exploration 23: Using Iteratorsimport#include
Exploration 24: Unnamed Functionsimport#include
Exploration 25: Overloading Function Namesimport#include
Exploration 26: Big and Little Numbersimport#include
Exploration 27: Very Big and Very Little Numbersimport#include
Exploration 28: Documentationimport#include
Exploration 29: Project 1: Body-Mass Indeximport#include
Exploration 30: Custom Typesimport#include
Exploration 31: Overloading Operatorsimport#include
Exploration 32: Custom I/O Operatorsimport#include
Exploration 33: Assignment and Initializationimport#include
Exploration 34: Writing Classesimport#include
Exploration 35: More About Member Functionsimport#include
Exploration 36: Access Levelsimport#include
Exploration 37: Understanding Object-Oriented Programmingimport#include
Exploration 38: Inheritanceimport#include
Exploration 39: Virtual Functionsimport#include
Exploration 40: Classes and Typesimport#include
Exploration 41: Declarations and Definitionsimport#include
Exploration 42: Modulesimport#include
Exploration 43: Old-Fashioned “Modules”import#include
Exploration 44: Function Objectsimport#include
Exploration 45: Useful Algorithmsimport#include
Exploration 46: More About Iteratorsimport#include
Exploration 47: Ranges, Views, and Adaptorsimport#include
Exploration 48: Exceptionsimport#include
Exploration 49: More Operatorsimport#include
Exploration 50: Project 2: Fixed-Point Numbersimport#include
Exploration 51: Function Templatesimport#include
Exploration 52: Class Templatesimport#include
Exploration 53: Template Specializationimport#include
Exploration 54: Partial Template Specializationimport#include
Exploration 55: Template Constraintsimport#include
Exploration 56: Names and Namespacesimport#include
Exploration 57: Containersimport#include
Exploration 58: Locales and Facetsimport#include
Exploration 59: International Charactersimport#include
Exploration 60: Text I/Oimport#include
Exploration 61: Project 3: Currency Typeimport#include
Exploration 62: Pointersimport#include
Exploration 63: Regular Expressionsimport#include
Exploration 64: Moving Data with Rvalue Referencesimport#include
Exploration 65: Smart Pointersimport#include
Exploration 66: Files and File Namesimport#include
Exploration 67: Working with Bitsimport#include
Exploration 68: Enumerationsimport#include
Exploration 69: Multiple Inheritanceimport#include
Exploration 70: Concepts, Traits, and Policiesimport#include
Exploration 71: Names, Namespaces, and Templatesimport#include
Exploration 72: Overloaded Functions and Operatorsimport#include
Exploration 73: Programming at Compile Timeimport#include
Exploration 74: Project 4: Calculatorimport#include