developers, architects
1 day

C++ is no longer C with classes and it never was just an Object-Oriented language. C++ is a general-purpose programming language. It has procedural, object-oriented, and generic programming features, while also providing facilities for low-level memory manipulation. If used correctly, it provides hard to beat performance.

Such usage requires a good knowledge of C++ templates and Modern C++ Idioms which are much different from commonly known design patterns popularized by GoF book and invented to handle common use cases in pure OO languages like Java or C#. Learning C++-specific idioms will allow us to build powerful tools that are useful in the everyday work of every C++ developer. The hands-on part of the workshop will cover RAII, Copy-and-Swap, Smart Pointer, Type Traits, Policy-based Design, EBO, Type Erasure, CRTP, and other popular C++ Idioms.

The training targets C++ developers and code architects that want to improve their skills in implementing general-purpose tools.

This course is a subset of a longer Modern C++ Design: Part II - Guidelines, Idioms, and (Anti)Patterns training. If you already took the other one or intent to do so, probably you should skip this training.


  • Learning Modern C++ idioms and their use cases
  • Particular focus on the usage of "C++ templates" in practical tasks


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. C++ Basics in a nutshell
    1. C++ Types
    2. Value Categories
    3. Name Lookup
    4. Swap
    5. Range-based for loop
    6. Special Member Functions
    7. Exception Safety
  2. C++ Templates in a nutshell
    1. C++ template definition
    2. Template parameters
    3. Template specialization
  3. Modern C++ Idioms
    1. Non-Movable
    2. RAII
    3. Copy-and-swap
    4. Smart Pointer
    5. type_identity
    6. Type Traits
    7. Tag dispatch
    8. Policy-based design
    9. EBO
    10. Type Erasure
    11. SOO
    12. Copy-on-write
    13. CRTP
    14. Barton-Nackman Trick
    15. Singleton
    16. Customization point object (Niebloid)
    17. Mixin
developers, architects
1 day


Mateusz Pusz