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 earlier.
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 compiler version thanks to the Compiler Explorer, so no special environment preparation is needed.
TRAINING HIGHLIGHTS
- 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
TRAINING AGENDA
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.
- Various usability extensions
- using enum
- Fixing aggregates
- Designated initialization
- Three-way comparison
- char8_t
- Nested inline namespaces
- explicit(bool)
- [[no_unique_address]] attribute
- [[nodiscard]] for constructors
- Range-based for statements with initializer
- Lambdas on steroids
- Better moves
- Improving structured bindings
- Implicit-lifetime types
- Array size deduction in new-expressions
- Destroying operator delete
- Explicitly defaulted functions with different exception specifications
- likely and unlikely attributes
- Deprecating volatile
- Comma omission and comma deletion
- Feature-test macros
- Other
- Compile-time evaluation enhancements
- Expanded constexpr
- Immediate functions
- constinit
- std::is_constant_evaluated
- Modules
- Module Units
- Exporting
- Importing
- Module Partitions
- Visibility vs Reachability
- Support for non-modular code
- Module use from non-modular code
- Transitioning to modules
- Pitfalls
- Templates on steroids
- Generic functions
- CTAD for aggregates and aliases
- Down with typename!
- Constraints and Concepts
- Conditionally Trivial Special Member Functions
- Class NTTPs
- Major C++ Library additions
- Improving Current Library Features
- std::span
- Simplified partial function application
- Iterators Library
- Ranges Library
- Text formatting
- Even better chrono
- Maths
- Bits
- Memory
- Thread Support
- Atomics
- Type Traits
- Other
- Coroutines
- Coroutine keywords, restrictions, suspend points
- Coroutine return type
- std::coroutine_traits
- Coroutine promise interface
- std::coroutine_handle
- Awaiters and Awaitables
- Symmetric Control Transfer
- C++ exceptions support
- Eager and Lazy Tasks
- async with coroutines
- sync_await
- Generators
- Custom allocator support
- Coroutine support libraries