.. include:: C++: News Until C++20 (2 Days) ============================== Training Goal/Style ------------------- The audience consists of professional programmers who are not new to C++. As such, rather than reinforcing each topic through exercises, it is more important to *discuss* matters and to develop a common knowledge and a common sense. Throughout the training, the presentation style will be live-coding-by-trainer, only falling back to a traditional frontal presentation style where applicable. The audience will be left with a screenplay-like writeup, much like :doc:`this one `. Topics ------ The following list of topics is the outcome of a "pre-sales" talk with the customer, for a two-days on-site C++ training. The list is largely unordered (yet), and adaptations to it are likely to be made. * Brace initialization (:doc:`here `) * RValue References, and Move Semantics (:doc:`here `). Primarily, show the *usage* of moving. * What the compiler knows/does * Relation with RVO * Using ``std::move()`` * Rule of 5 (as opposed to "3" before rvalue references were invented) * ``= delete``, ``= default`` * Non-relation to *perfect forwarding* ( :doc:`here `) * Container and algorithms overview (:doc:`here `). Show hash-table based data structures ``std::unordered_set<>`` and ``std::unordered_map<>`` [#make_material]_. * Structured Binding (:doc:`here `). Discuss usage of ``std::tuple<>``. * ``constexpr`` (:doc:`here `) [#adapt_standard]_ * Multithreading (:doc:`here `). `OpenMP `__ is used by the custumer, so the problem appears to be solved. It might not hurt, though, to know what a race condition is, and how to protect against it. * Smart pointers: ``std::shared_ptr<>`` vs. ``std::unique_ptr<>`` (:doc:`here `). Probably show the *RValue References/Move Semantics* topic in the light of understanding compiler error messages when using ``std::unique_ptr<>`` incorrectly. * ``std::array<>`` [#make_material]_ * ``std::span<>`` [#make_material]_ * Ranges and views (:doc:`here `) * ``std::any`` (:doc:`here `), ``std::variant<>`` (:doc:`here `). Show usage, and discuss. * The "spaceship" operator [#make_material]_ * ``std::fmt`` (vs ``printf()``) [#make_material]_ * ``std::filesystem`` (:doc:`here `). In addition to basic functionality, show how to handle UTF-8 encoded paths (``std::filesystem::u8path``) [#make_material]_ * Deducing ``this`` (C++23) [#make_material]_ * Execution policies of parallel algorithms [#make_material]_ .. rubric:: Footnotes .. [#adapt_standard] Material to be adapted to the latest standards. .. [#make_material] Material to be created.