developers, architects
5 days

C++ is a hard 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 with great performance and resistance to programming errors. Such a coding style is called Modern C++.

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

This training should be considered a 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
    2. C++ Types and their properties
    3. Type conversions
    4. Value categories
    5. Objects
    6. Alignment
    7. Scope
    8. Lifetime
    9. ODR
    10. Storage duration
    11. Initialization
    12. Name Lookup
    13. Overload Resolution
    14. Customization points
    15. Range-based for loop
    16. Special Member Functions
    17. Rule of Three, Five, and Zero
  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. Smart pointers
    5. std::string_view
    6. std::optional
    7. std::tuple
    8. std::variant
  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