Higher levels of abstraction are useful for building things out of, but also have a higher cognitive and maintenance cost. That is, it’s a lot easier to refactor a function than it is to change a type, and similarly easier to deal with a single concrete type than a class template, or a Concept, or a meta-Concept…
In this talk I’ll present example strategies for refactoring the interface of functions, classes, and class templates. I’ll also discuss how the recent addition of Concepts and the proposals for even-more-abstract features affect long-term refactoring in C++. If you’re interested in refactoring, and it isn’t immediately clear that a Concept published in a library can never change, this talk is for you.