C++ Templates for Developers

Walter E Brown

⏱ 2-day-workshop
10:00-18:00, Monday, 1st - Tuesday, 2nd July 2024

As an intermediate-level C++ programmer, you already know about and have very likely used one or more kinds of C++ templates in your code. Whether you've applied std::vector or std::array to your work, or called upon any of the multitude of algorithms that the standard library provides, you've experienced some of the power that templates add to a C++ programmer's toolkit.

This Workshop will help you take your knowledge and experience to the next level, so that you will both (1) understand exactly how C++ templates are handled by a compiler, and (2) be able to take advantage of that knowledge to create templates that are tailored to your own programming needs.

In this Workshop, we will explore all significant facets of the many kinds of C++ templates (and other templated entities), and will do so in as much depth as our time together will permit. The Workshop will include presentations as well as optional (but recommended) practice exercises, together with numerous examples and tips that you can learn from and apply. Many of our examples and exercises will be taken from the standard library, thus doubling the useful information you'll glean from your participation.

Come discover how the world of C++ templates will open to you once you've mastered a modest handful of straightforward, key insights and principles. Whether it's programming generically, or with variadics, SFINAE, concepts, overloading, or other coding practices, this Workshop will allow you to explore and apply template-based techniques that will help solve problems in your programming domain!


We will emphasize principles that will allow you to reason about template technology. To that end, the Workshop expects to cover the following representative topics in the time available (not in the order listed here):

Kinds of templates: • alias templates • class templates • concepts • deduction guides • function templates • generic lambdas • templated members • variable templates

Template processing and mechanics: • declaration synthesis • dependent and non-dependent names • function objects • non-deduced contexts • overloading • reference collapsing • specialization (implicit, explicit, partial) • substitution / substitution failure (SFINAE) • template arguments / argument deduction / default arguments • template instantiation and its control • template parameters (type, nontype, and template) • two-phase name lookup

Related C++ language features: • constraints / requires-clauses • declvalenable_ifif constexprrequires-expressions • sizeof...static_assert • variadic templates / parameter packs / pack expansion / fold expressions

Related standard library facilities: • constants as types • function and friends • invoke and friends • traits for inspecting types • traits for manipulating types

Classical techniques / practices / idioms: • algorithms • containers • perfect forwarding • tag dispatch • template metaprogramming • void_t and the detection idiom


Attendees should have good intermediate-level C++ knowledge with at least one to two years of recent C++ coding experience.

Those planning to do the recommended exercises should bring their preferred development environment. A compiler that supports C++20 (e.g., GCC12+) is recommended, but C++17 support can suffice for this Workshop.


Past participants in this Workshop have reported their experiences with such praise as:

  • "I appreciated that your class laid the solid foundation and built upon that in a deliberate way that enhanced my grasp of the material."
  • "It was a fantastic course, and I am saying this as someone who paid for it out of his own pocket."
  • "I definitely learned a lot that I'll be able to carry forward into my work. I've also already recommended the course to my colleagues and hope that they'll be able to attend a future iteration."

Dr. Brown looks forward to welcoming you to his "C++ Templates for Developers" Workshop!

Walter E Brown

With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a computer programmer for over 60 years, and a C++ programmer for nearly 45 of those years.

He joined the C++ standards effort in 2000, and has since written circa 175 proposal papers. Among numerous other contributions, he is responsible for introducing such now-standard C++ library features as cbegin/cend, common_type, gcd/lcm, void_t, and <cmath>'s mathematical special functions, as well as the headers <random> and <ratio>. He has also significantly impacted such C++ core language features as alias templates, contextual conversions, variable templates, static_assert, and operator<=> (the C++20 "spaceship operator").

When not playing with his grandchildren, Dr. Brown continues as an Emeritus participant in the C++ standards process and as a frequent speaker at C++ conferences and meetups worldwide.

Attendees and video viewers have described his many conference presentations with such accolades as:

  • "Fantastic speaker"
  • "Awesome!"
  • "Impressive. Thank you"
  • "As usual very clear presentation. Content is great, slides have the right level of complexity."
  • "I think Walter E. Brown is the teacher I never had."
  • "For a moment I was like I know these issues but thankfully I ignored that thought."