developers, architects
3-4 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 of the training material. The final agenda is always created based on the individual pre-training analysis of client's requirements and constraints.

  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
    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