C++ Concepts: Constraining C++ Templates in C++20 and Before

C++ Concepts: Constraining C++ Templates in C++20 and Before is a two-day online training course with programming exercises taught by Mateusz Pusz. It is offered online from 11AM to 3PM Eastern Time (EDT),  Monday September 21st and Tuesday September 22nd, 2020 (after the conference).

Course Description

C++ Concepts is one of the most significant and long-awaited features of C++20. They improve template interfaces by explicitly stating the compile-time contract between the user and the architect of the code. Concepts limit the number of compilation errors and make them much more user-friendly when they occur.

The workshop will describe this C++20 feature, its similarities and differences to Concepts TS (provided with gcc-7), and will present ways to benefit from a significant part of the functionality in current production C++ projects that can use only “legacy” C++11 features.

The training targets C++ developers and code architects that want to improve their skills in implementing general-purpose tools.


In order to be able to follow the workshop, you should be current with C++ and have some recent experience with writing simple C++ templates. C++11/14 knowledge is suggested but not mandatory.

Course Topics

  1. C++ Templates in a Nutshell
    • C++ template definition
    • Template parameters
    • Template specialization
  2. Introduction to C++20 Concepts
    • Motivation
    • Concept Definition
    • Constraining Types with Concepts
    • requires Clause
    • requires Expression
    • Concept Categories
    • C++ Standard Library Concepts
    • Constraint Normalization
  3. Concepts TS
    • Major Differences from C++20 Concepts
  4. Concepts Emulation in C++17
    • SFINAE
    • std::enable_if
    • std::void_t
    • Type Traits
    • Constraining Class Template Parameters

Register Here

Course Instructor

Mateusz PuszMateusz Pusz is a software architect, principal engineer, and security champion with more than 15 years of experience in designing, writing and maintaining C++ code for fun and living. C++ consultant, trainer, conference speaker, and evangelist focused on Modern C++. His main areas of interest and expertise are code performance, low latency, stability, and security.

Mateusz worked at Intel for 13 years, and now he is a Principal Software Engineer and the head of the C++ Competency Center at EPAM Systems. He is also a founder of Train IT that provides dedicated C++ trainings and consultant services to corporations around the world.

Mateusz is a contributor and an active voting member of the ISO C++ Committee (WG21) where, together with the best C++ experts in the world, he shapes the future of the C++ language. He is also a co-chair of WG21 Study Group 14 (SG14) responsible for driving performance and low latency subjects in the Committee. In 2013 Mateusz won “Bench Games 2013” – worldwide competition in the C++ language knowledge.