Esto acaba de surgir en el contexto de otra pregunta .
Aparentemente, las funciones miembro en las plantillas de clase solo se instancian si se utilizan ODR. ¿Alguien podría explicar qué significa eso exactamente? El artículo de Wikipedia sobre la regla de una definición (ODR) no menciona el " uso de ODR ".
Sin embargo, el estándar lo define como
Una variable cuyo nombre aparece como una expresión potencialmente evaluada se usa odr a menos que sea un objeto que satisfaga los requisitos para aparecer en una expresión constante (5.19) y se aplique inmediatamente la conversión de lvalor a rvalue (4.1).
en [basic.def.odr].
Editar: Aparentemente, esta es la parte incorrecta y todo el párrafo contiene múltiples definiciones para diferentes cosas. Este podría ser el relevante para la función de miembro de la plantilla de clase:
Una función no sobrecargada cuyo nombre aparece como una expresión potencialmente evaluada o un miembro de un conjunto de funciones candidatas, si se selecciona mediante la resolución de sobrecarga cuando se hace referencia a ella desde una expresión potencialmente evaluada, se utiliza odr, a menos que sea un virtual puro función y su nombre no está calificado explícitamente.
Sin embargo, no entiendo cómo funciona esta regla en varias unidades de compilación. ¿Se crean instancias de todas las funciones miembro si instancia explícitamente una plantilla de clase?