这只是在另一个问题的背景下出现的。
显然,仅在使用ODR时才实例化类模板中的成员函数。有人可以解释这到底意味着什么。在上一个定义规则(ODR),维基百科的文章并没有提及“ ODR使用”。
但是该标准将其定义为
除非其对象满足在常量表达式中出现的要求(5.19)并且立即应用左值到右值转换(4.1),否则将使用其名称显示为可能评估的表达式的变量。
在[basic.def.odr]中。
编辑:显然这是错误的部分,整个段落包含针对不同事物的多个定义。这可能与类模板成员函数有关:
如果非重载函数的名称显示为可能评估的表达式或一组候选函数的成员,则如果非重载函数是纯虚函数,则如果通过重载解析从潜在评估的表达式中进行引用而选择了非重载函数,则该名称不会被使用函数及其名称未明确限定。
但是我不明白,该规则如何在多个编译单元中起作用?如果显式实例化类模板,是否会实例化所有成员函数?