Translated translation units and instantiation units are combined as follows:
Each translated translation unit is examined to produce a list of required instantiations.
The definitions of the required templates are located.
All the required instantiations are performed to produce instantiation units.
The program is ill-formed if any instantiation fails.
The separate translation units of a program communicate by (for example) calls to functions whose identifiers have
external linkage;
manipulation of objects whose identifiers have external linkage;
manipulation of data files.
Some or all of these translated translation units and instantiation units may be supplied from a library. Required instantiations may include instantiations which have been explicitly requested. It is implementation-defined whether the source of the translation units containing these definitions of the required templates are located is required to be available. Translation units can be separately translated and then later linked to produce an executable program.
Thus Instantiation units are similar to translated translation units, but contain no references to un-instantiated templates and no template definitions.