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