993. Freedom to perform instantiation at the end of the translation unit
Section: 14.6.4.1 [temp.point] Status: C++11 Submitter: John Spicer Date: 6 March,2009
[Voted into the WP at the March,2011 meeting.]
The intent is that it is a permissible implementation technique to do template instantiation at the end of a translation unit rather than at an actual point of instantiation. This idea is not reflected in the current rules,however.
Proposed resolution (January,2011):
Change 14.6.4.1 [temp.point] paragraph 7 as follows:
A specialization for a function template,a member function template,or of a member function or static data member of a class template may have multiple points of instantiations within a translation unit,and in addition to the points of instantiation described above,for any such specialization that has a point of instantiation within the translation unit,the end of the translation unit is also considered a point of instantiation. A specialization for a class template…
C11中的14.6.4.1/7段在N3936中为14.6.4.1/8:
A specialization for a function template,or of a member function or static
data member of a class template may have multiple points of instantiations within a translation unit,and
in addition to the points of instantiation described above,for any such specialization that has a point
of instantiation within the translation unit,the end of the translation unit is also considered a point of
instantiation. A specialization for a class template has at most one point of instantiation within a translation
unit. A specialization for any template may have points of instantiation in multiple translation units. If
two different points of instantiation give a template specialization different meanings according to the one
definition rule (3.2),the program is ill-formed,no diagnostic required.
所以是的,实现允许将模板的实例化点延迟到翻译单元的末尾.