developers, architects
4 days

C++20 is not just yet another incremental update but a profound change to the C++ language and its standard library. With many essential features added this C++ version may impact us even more than C++11 did nearly 10 years ago.

C++20 is already ratified by the ISO C++ Committee and should be published as the official ISO document soon. The C++ compiler developers are working hard to make their product conforming to the new specification and lots of features are already available to play with. During the training, a particular emphasis will be put on learning and practicing the most prominent C++20 features like Concepts, Ranges, and Coroutines, but also we will try many other smaller features of the new language.

Two days are not enough to cover everything of this massive release. We will do our best to cover as much as possible but probably we will scope mainly on the new language features and will cover only the most essential library facilities.

Most probably during the workshop we will work with the latest version of the compiler thanks to the Compiler Explorer, so no special environment preparation is needed.


  • Introduction of the most important features and changes of the C++20 language
  • Particular focus on describing the reason and benefit of adding each change
  • Hands-on workshops to master usage of the most important new tools


The following plan is an initial proposal for the training material. The final agenda is always created based on the individual pre-training analysis of the client's requirements and constraints.

  1. Various usability extensions
    1. using enum
    2. Fixing aggregates
    3. Designated initializers
    4. Three-way comparison
    5. char8_t
    6. Nested inline namespaces
    7. explicit(bool)
    8. [[no_unique_address]] attribute
    9. Range-based for statements with initializer
    10. Lambdas on steroids
    11. Improving structured bindings
    12. Array size deduction in new-expressions
    13. likely and unlikely attributes
    14. Destroying operator delete
  2. Templates on steroids
    1. Generic functions
    2. CTAD for aggregates and aliases
    3. Down with typename!
    4. Concepts
    5. Class NTTPs
  3. Compile-time evaluation enhancements
    1. Expanded constexpr
    2. Immediate functions
    3. constinit
    4. std::is_constant_evaluated
  4. Major C++ Library additions
    1. Even better chrono
    2. std::span
    3. Improving smart pointers
    4. Iterators Library
    5. Ranges Library
    6. Text formatting
    7. Simplified partial function application
    8. Consistent Container Erasure
    9. Mathematical constants
  5. Coroutines
    1. coroutine_traits
    2. coroutine_handle
    3. Generators
  6. Modules
    1. Module Units
    2. Exporting
    3. Importing
    4. Module Partitions
    5. Support for non-modular code
    6. Module use from non-modular code
developers, architects
4 days


Mateusz Pusz