TL;DR: 4/5. A solid “2nd book” if you already knew some C++98/03 or have learned a bit of modern C++ from another resource

I’ve just finished the Tour of C++ 2nd edition by Bjarne Stroustrpe. Below is a
quick glance over the book’s chapters, as well as what I liked/disliked.
Chapter 1: The Basics
- A quick tour of basic constructs. Previous C or C++ knowledge is assumed.
Chapter 2: User-Defined Types
- Explains user-defined types (struct’s, classes, enum’s and enum classes, and
unions.) using a basic Vector example.
Chapter 3: Modularity
- How C-inherited includes work, code separation, namespaces and the incoming
C++20 module feature.
- Exceptions and other error-handling approaches (contracts, asserts, static
asserts etc,.) as well as structured binding for function return values.
Chapter 4: Classes
- Different types of classes (concrete and abstract) and related features such
as inheritance and virtual functions.
Chapter 5: Essential Operations
- Copy and Move semantics, and how they relate to resource management.
- Defining and using operations (equality, comparisons, swap…) for containers
as well as user-defined literals.
Chapter 6: Templates
- How to use templates to express operations that apply to different argument types.
Chapter 7: Concepts and Generic Programming
- Follow-up to the templates chapter. How to obtain generic algorithms using
templates and the incoming Concepts feature.
Chapter 8: Library Overview
- A gloss-over of the standard-library, and the different headers and
abstractions that are provided.
Chapter 9: Strings and Regular Expressions
- Exposes the standard library’s strings and regex implementations.
Chapter 10: Input and Output
- How to conduct I/O operations in C++ iostream, instead of C-Style I/O.
- User-defined input/output operators, and file and String streams.
Chapter 11: Containers
- The most-used STL containers (vector, array, map, unordered_map…)
Chapter 12: Algorithms
- How to use the different iterator types.
- A quick look at some algorithms provided by the standard library (for_each(), find(), find_if()…)
Chapter 13: Utilities
- Anything that didn’t fit elsewhere (Resource Management with smart pointers,
Custom allocators, variant/optional/any alternatives, function adaption with
lambda’s/mem_fn/function() etc,.)
Chapter 14: Numerics
- A quick look at the mathematical functions, numeric limits and random-numbers generation.
Chapter 15: Concurrency
- The different concurrency features (threads, shared/unique locks, condition
variables, future/promise, async())
Chapter 16: History and Compatibility
- The history and evolution of C++.
- How C and C++ relate to each other, and their incompatibilities.
Here are some opinions about the book:
- This book is not an introduction to C++, contrary to advice you may find on
the internet. The book is better seen as: Here are a billion of things you
don’t know about modern C++. Look for explanations, rationales and use cases
elsewhere.
- The quick advice points at each chapters (with mentions to the C++ Core
Guidelines.) They were worth re-reading after I finished the book, and
further investigating
- It would have been better if the author mentioned to which of the 11/14/17
standards each discussed feature belonged. They only did so for the C++20
features such as modules.
- Chapters 6 and 7 (about templates and generic programming) were lackluster.
Ironically, these were the ones that I was looking forward to.
- I specifically liked the last chapter about the history and evolution of C++,
which shed the light on the rationale behind the inclusion of various C++
features, and the way they behave.
- The chapter about concurrency was particularly very-well laid-out and easy to
follow.
- I wish that the author provided more real-world anecdotes, such as the one
about pool allocators. This would have given better appreciation of the
discussed features, especially the newly introduced ones.