developers, architects
5-6 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 ten years ago.

It took some time, but most major C++ compilers now provide nearly full C++20 support. This means that we have many features 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. We will also try many other smaller but interesting features of the new language, like spaceship operator, calendars and timezones, new concurrency synchronization primitives, text formatting library, and many more.

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 initialization
    4. Three-way comparison
    5. char8_t
    6. Nested inline namespaces
    7. explicit(bool)
    8. [[no_unique_address]] attribute
    9. [[nodiscard]] for constructors
    10. Range-based for statements with initializer
    11. Lambdas on steroids
    12. Better moves
    13. Improving structured bindings
    14. Implicit-lifetime types
    15. Array size deduction in new-expressions
    16. Destroying operator delete
    17. Explicitly defaulted functions with different exception specifications
    18. likely and unlikely attributes
    19. Deprecating volatile
    20. Comma omission and comma deletion
    21. Feature-test macros
    22. Other
  2. Compile-time evaluation enhancements
    1. Expanded constexpr
    2. Immediate functions
    3. constinit
    4. std::is_constant_evaluated
  3. Modules
    1. Module Units
    2. Exporting
    3. Importing
    4. Module Partitions
    5. Visibility vs Reachability
    6. Support for non-modular code
    7. Module use from non-modular code
    8. Transitioning to modules
    9. Pitfalls
  4. Templates on steroids
    1. Generic functions
    2. CTAD for aggregates and aliases
    3. Down with typename!
    4. Constraints and Concepts
    5. Conditionally Trivial Special Member Functions
    6. Class NTTPs
  5. Major C++ Library additions
    1. Improving Current Library Features
    2. std::span
    3. Simplified partial function application
    4. Iterators Library
    5. Ranges Library
    6. Text formatting
    7. Even better chrono
    8. Maths
    9. Bits
    10. Memory
    11. Thread Support
    12. Atomics
    13. Type Traits
    14. Other
  6. Coroutines
    1. Coroutine keywords, restrictions, suspend points
    2. Coroutine return type
    3. std::coroutine_traits
    4. Coroutine promise interface
    5. std::coroutine_handle
    6. Awaiters and Awaitables
    7. Symmetric Control Transfer
    8. C++ exceptions support
    9. Eager and Lazy Tasks
    10. async with coroutines
    11. sync_await
    12. Generators
    13. Custom allocator support
    14. Coroutine support libraries
developers, architects
5-6 days


Mateusz Pusz