O que significa “usar ODR” alguma coisa?
Isso só surgiu no contexto deoutra pergunta.
Aparentemente, as funções-membro nos modelos de classe são instanciadas apenas se forem utilizadas pelo ODR. Alguém poderia explicar o que exatamente isso significa? oArtigo da wikipedia sobre Regra de Uma Definição (ODR) não menciona "ODR-use".
No entanto, o padrão define como
Uma variável cujo nome aparece como uma expressão potencialmente avaliada éodr-used a menos que seja um objeto que satisfaça os requisitos para aparecer em uma expressão constante (5.19) e a conversão lvalue para rvalue (4.1) seja imediatamente aplicada.
em [basic.def.odr].
Edit: Aparentemente, esta é a parte errada e todo o parágrafo contém várias definições para coisas diferentes. Isso pode ser o relevante para a função de membro de 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, é utilizada, 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 instanciar explicitamente um modelo de classe?