In this chapter, we have learned about a very C++-specific pattern that was originally introduced as a workaround for the buggy early C++ compilers but found new use years later. The friend factory is used to generate non-template functions from instantiations of class templates. As non-template functions, these generated friends have much more flexible rules with regards to argument conversions compared to template functions. We have also learned how the argument-dependent lookup, type conversions, and the friend factory work together to deliver a result that looks very natural, by a process that is far from intuitive.
The next chapter describes a totally different kind of Factory—a C++ pattern that's based on the classic Factory pattern and addresses a certain asymmetry in the language—all member functions, even destructors, can be virtual, except...