developers, architects
5 days

C++ is a complex and complicated programming language. When used correctly, it delivers the best possible performance. Unfortunately, it is often misused, which is a source of many problems.

However, it turns out that in the case of conscious usage of selected language features, it can be relatively easy to produce high-quality software that delivers excellent runtime performance and is error-proof. Such a coding style is called Modern C++.

The training targets developers with professional experience with C++ programming language and who know the problems caused by the careless ways of coding in this language. The workshop aims to strengthen the knowledge of the C++ language and show how to avoid many problems that often appear in the production code.

This training should be considered mandatory training for all C++ developers and code architects. It is a foundation for all other C++ trainings offered by Train IT.


  • Emphasis on understanding the philosophy and mechanisms of C++ programming language and learning how to reuse this knowledge in own code
  • Particular focus on the usage of C++ templates in practical tasks
  • Development of error-unfriendly code
  • Selection of useful patterns and techniques that prove in a demanding production code


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 for Experts
    1. Identifiers and naming conventions
    2. Namespaces
    3. C++ Types and their properties
    4. Value vs reference semantics
    5. Pointers vs references
    6. Unscoped vs scoped enumerations
    7. Classes and friends
    8. Special Member Functions
    9. Rule of Three, Five, and Zero
    10. Value categories
    11. Automatic type deduction
    12. Type conversions
    13. Objects
    14. Alignment
    15. Scope
    16. Lifetime
    17. ODR and inline
    18. Storage duration
    19. Stack vs Heap vs Free Store
    20. Initialization
    21. Name Lookup
    22. Overload Resolution
    23. Customization points
    24. Range-based for loop
  2. Coding with performance in mind
    1. Things to avoid on a fast path
    2. Copy elision
    3. Move semantics
    4. Ref-qualifiers
    5. noexcept
    6. constexpr
    7. Source code vs hardware - introduction
  3. Utilities that every C++ developer should know and use
    1. Lambda expressions
    2. std::function
    3. Algorithms
    4. RAII
    5. Smart pointers
    6. std::string_view
    7. std::span
    8. std::optional
    9. std::variant
    10. std::expected
    11. std::tuple
  4. Templates demystified
    1. Class, function, variable, and alias templates
    2. Parameters and arguments
    3. Explicit and partial specialization
    4. Explicit and implicit instantiation
    5. Template argument deduction
    6. Variadic templates
    7. Fold-expressions
    8. Structured binding
    9. Dependent names
    10. SFINAE
developers, architects
5 days


Mateusz Pusz