developers, architects
3 days

Today stability and security are so important subjects that in order to achieve them many companies are even willing to sacrifice the performance of the final product.

This training is not a comprehensive training on all security aspects. It rather scopes on the C++ language side of that subject and provides an overview and practical answers on writing stable and secure C++ code. It describes typical coding standards used on the C++ market and points out common issues introduced by their usage. Workshop part of the training scopes heavily on how to write strong interfaces that are easy to use and hard to abuse. They also teach tools, C++ features, and coding practices that enforce writing secure code. A lot of attention is put on various types of error handling.

The training is targeted at C++ developers and code architects that need to write a software that is resistant to security and stability coding errors.

This course builds on top of the knowledge delivered in Advanced Modern C++ training so please consider requesting them in that order.


  • Understanding of how a bad coding standard encourages the injection of security and stability related issues
  • Special focus on mastering the skills needed to design and implement strong interfaces
  • Learning the tools that prevent injection of security and stability issues in user's code
  • Broad review and emphasis on selecting the best error handling scenarios to do the job


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. Advanced Modern C++ in a nutshell
    1. Identifiers
    2. C++ Types
    3. Objects and their representation
    4. Lifetime and Storage
    5. Name Lookup
    6. Special Member Functions
    7. Value and reference semantics
  2. Bad coding standards
    1. Typical issues of legacy code
    2. Pitfalls of buggy coding standards
    3. Class construction and destruction
    4. Magic numbers everywhere
  3. Strong interfaces
    1. Pointless Pointers
    2. Helper types and idioms
    3. Polymorphism vs templates
    4. C++ Concepts
    5. C++ Contracts
  4. Features, tools, and practices
    1. Range-based for loop
    2. C++ ranges
    3. algorithms
    4. std::array<T, N>, std::string_view, span<T, N>
    5. Smart pointers
    6. override
    7. static_assert
    8. type_traits
    9. std::variant<Types...>
  5. Error handling
    1. C-style
    2. C++ dynamic exceptions
    3. noexcept, std::error_code and std::error_condition
    4. std::optional<T>
    5. std::expected<T, E>
    6. C++ static exceptions (C++ proposal)
developers, architects
3 days


Mateusz Pusz