Questo è appena emerso nel contesto di un'altra domanda .
Apparentemente le funzioni membro nei modelli di classe vengono istanziate solo se sono utilizzate da ODR. Qualcuno potrebbe spiegare cosa significa esattamente. L' articolo di wikipedia su One Definition Rule (ODR) non menziona "l' uso di ODR ".
Tuttavia lo standard lo definisce come
Una variabile il cui nome appare come un'espressione potenzialmente valutata viene usata odr a meno che non sia un oggetto che soddisfa i requisiti per apparire in un'espressione costante (5.19) e la conversione lvalue-rvalue (4.1) viene immediatamente applicata.
in [basic.def.odr].
Modifica: Apparentemente questa è la parte sbagliata e l'intero paragrafo contiene più definizioni per cose diverse. Questo potrebbe essere quello rilevante per la funzione membro del modello di classe:
Una funzione non sovraccaricata il cui nome appare come un'espressione potenzialmente valutata o un membro di un insieme di funzioni candidate, se selezionata dalla risoluzione dell'overload quando ci si riferisce a un'espressione potenzialmente valutata, viene usata odr, a meno che non sia un puro virtuale funzione e il suo nome non è esplicitamente qualificato.
Tuttavia non capisco, come funziona questa regola su più unità di compilazione? Tutte le funzioni membro vengono istanziate se istanzio esplicitamente un modello di classe?