Isso acabou de surgir no contexto de outra questão .
Aparentemente, funções de membro em modelos de classe são instanciadas apenas se forem usadas por ODR. Alguém poderia explicar o que exatamente isso significa. O artigo da Wikipedia sobre One Definition Rule (ODR) não menciona o " uso de ODR ".
No entanto, o padrão o define como
Uma variável cujo nome aparece como uma expressão potencialmente avaliada é usada por odr, a menos que seja um objeto que satisfaça os requisitos para aparecer em uma expressão constante (5.19) e a conversão de lvalor em rvalue (4.1) seja aplicada imediatamente.
em [basic.def.odr].
Edit: Aparentemente, esta é a parte errada e todo o parágrafo contém várias definições para coisas diferentes. Este pode ser relevante para a função de membro do modelo de classe:
Uma função não sobrecarregada cujo nome aparece como uma expressão potencialmente avaliada ou um membro de um conjunto de funções candidatas, se selecionada por resolução de sobrecarga quando referida a partir de uma expressão potencialmente avaliada, é usada por odr, a menos que seja um virtual puro função e seu nome não é explicitamente qualificado.
No entanto, não entendo como essa regra funciona em várias unidades de compilação. Todas as funções de membro são instanciadas se eu explicitamente instanciar um modelo de classe?