The friend factory is a pattern that synthesizes a non-template, non-member function from every instantiation of a class template—every time the template is instantiated on a new type, a new function is generated. For its parameters, this function can use any types we can declare in that instantiation of the class template. Usually, this is the class itself, but it can be any type the template knows about.
In this manner, the friend factory can be employed together with the Curiously Recurring Template Pattern (CRTP) that we studied in an Chapter 7, The Curiously Recurring Template Pattern. Recall that the main idea of the CRTP is that a class inherits from an instantiation of a base class template that is parameterized by the derived class type. Consider what we have here—a template for a base class...