Unit testing in modern C++ has some great tool support, but it's easy to forget how language features play their part in testability, and how designing code to be easy to test can be harder than it sounds. This talk explores how C++ language features can be used to great effect in creating testable code that (not coincidentally) makes it great for use in application code too.
This talk isn't particularly about TDD, but looks at some techniques for using abstractions to hide dependencies and how that leads to improved design that's by nature more easily tested. Along the way we'll encounter some modern C++ features, such as concepts, smart pointers, and CTAD, and see how they combine with common Design Patterns to result in readable code that clearly expresses the design, and will be equally practical for C++ novices and veterans.