MPCS 51045 Advanced C++ (Spring 2024)

Section 1
Instructor(s) Spertus, Michael (spertus)
Location JCL 298
Meeting Times Thursday 5:30pm - 8:30pm
Fulfills Elective Specialization - Software Engineering (SE-2)


Course Description

In this continuation of the Winter's C++ course, we go beyond the basics to cover the powerful and surprising techniques that make C++ a different language in the hands of an expert. If you use C++ in your daily life, you and your team will see striking benefits from understanding and using C++ at a deeper level. While the course is focused on C++, it can also be considered in many ways a course on advanced programming techniques that can be reused in any programming language to build enterprise-scale software as we build up both conceptual and practical models of advanced programming techniques.


One of our main goals will be to understand holistically how the broad feature set of C++ fits together to enable powerful programming paradigms. One example we will build over the course of the quarter is how to use metaprogramming techniques to implement Software Engineering "Design Patterns" with the aim of making a metaprogram that simply "executes your design documents." While this can't be done completely, C++ usefully comes way closer than one would ever guess, and we will be forced to hone our skills and tools to the utmost to get there.


Course Contents

As a seminar style course, many of the topics are influenced by the goals of the students, so please let me know if there is topic of interest to you. Typical topics have included:

Topics include:

    Advanced concurrency techniques like futures and promises with best practices to avoid the myriad pitfalls of multi-threaded programming.

    Advanced template techniques like SFINAE, CRTP, and variadics, which we will illustrate by implementing full featured classes like tuples.

    Using metaprograms to implement seamlessly Embedded Domain Specific Languages and Design Patterns.

    Learning how to read and leverage the C++ standard, so you can quickly locate definitive answers to any language questions.

    A tour of standard and popular libraries so you don’t have to reinvent the wheel.

    Creating your own STL-style iterators, so your types work seamlessly with STL algorithms

    Customizing I/O streams.

    Future directions of C++ to help you produce forward looking programs.


Weekly homework, and student chooses between a final exam and a final project


Teaching philosophy

I try to focus on teaching "what you can't get from a textbook." When I teach a C++ feature, I start with real-life use cases that can't be satisfactorily addressed without it, recap the discussions in the C++ committee during the design of the feature, including criticisms and alternative solutions, until we understand the actual outcome. What started out looking like an obscure feature full of mysterious technicalities and exceptions ends up being natural and "just what you expect."

About the Instructor

"As the founder of Boost (, the first and best known C++ library repository, and also as a long-time voting member of the C++ standards committee, I have come into contact with many of the notables of the C++ world. Mike Spertus is right up there with the best of them." -- Beman Dawes


Michael Spertus is a Distinguished Engineer at Symantec, where he serves as the Chief Architect for Symantec's Information Security Service. He is also a member of the C++ Standards Committee, where he has authored over 30 standard proposals. He has been involved in C/C++ languages since the 1980s, when he helped write one of the first commercial MS-DOS C compiler for the IBM PC-AT.

Course Prerequisites

MPCS 51044 C/C++ for Advanced Programmers or Instructor's consent

Other Prerequisites

This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here:

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 56540-1 -- Software Quality Assurance
  • MPCS 51220-1 -- Applied Software Engineering

Eligible Programs

MS in Computational Analysis in Public Policy (Year 2) MS in Molecular Engineering MA in Computational Social Science (Year 2) Bx/MS in Computer Science (Option 1: Research-Oriented) Bx/MS in Computer Science (Option 2: Professionally-oriented - CS Majors) Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science