developers, architects
3-4 days

C++ is a really hard and complex programming language. When used correctly it can deliver the best possible performance. Unfortunately, it can be easily misused which may become a source of many problems.

However, it turns out that in the case of deliberate 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 is targeted to 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 aim of the workshop is 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 your own code
  • Special focus on the usage of C++ templates in practical tasks
  • Development of error-unfriendly code
  • Selection of useful patterns and techniques that are proved in a demanding production code


The following plan is an initial proposal of the training material. The final agenda is always created based on the individual pre-training analysis of client's requirements and restrictions.

  1. C++ Basics for Experts
    1. Identifiers
    2. C++ Types and their properties
    3. Value categories
    4. Objects
    5. Alignment
    6. ODR
    7. Scope
    8. Lifetime
    9. Storage duration
    10. Initialization
    11. Name Lookup
    12. Range-based for loop
    13. Special Member Functions
  2. Coding with performance in mind
    1. Copy elision
    2. Move semantics
    3. Ref-qualifiers
    4. noexcept
    5. constexpr
    6. Source code vs hardware - introduction
  3. Utilities that every C++ developer should know and use
    1. Smart pointers
    2. Lambda expressions
    3. Algorithms and their specializations
    4. std::string_view
    5. std::optional
    6. std::tuple
    7. 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
  5. Workshop: Modern C++ Library
    1. High performance and no overhead
    2. Compile-time safety
    3. Value semantics
    4. C++ Templates
    5. Constant expressions
    6. Constraints and concepts
developers, architects
3-4 days


Mateusz Pusz