TITLE: what is hoisting [ This material adapted from "Designing and Coding Reusable C++", by Carroll and Ellis, Addison-Wesley, 1995, p. 80. ] There are several different aspects to designing and coding when considering efficiency. Static efficiency refers to the memory footprint of a section of code. Dynamic efficiency refers to the run-time speed of said code. Another kind of efficiency, which is becomes acute as project sizes increase, is compile-time efficiency. This becomes exacerbated with the use of C++ templates. In particular, the instantiation time for a given template becomes an issue. Given this, what techniques can be used to reduce template instantiation time? One technique is called "hoisting." This is a generalization of the "wrappers for pointer containers" technique that showed up as a tip within the past week or so. The idea is quite simple: when writing a template class, consider each method in turn. If the method does not depend upon the template parameters, split the template class into a non-template base and a template derived class. Move (hoist) these parameter independent methods up into the base class. Note that with experience, you will begin to recognize opportunites for "hoisting" even in cases where methods initially appear to depend upon template parameters. Clearly this is an optimization that could be performed by some smart compiler, but this kind of transformation is not done to date.