Dies kam gerade im Zusammenhang mit einer anderen Frage auf .
Anscheinend werden Mitgliedsfunktionen in Klassenvorlagen nur instanziiert, wenn sie ODR-verwendet werden. Könnte jemand erklären, was genau das bedeutet. Der Wikipedia-Artikel über One Definition Rule (ODR) erwähnt " ODR-Verwendung " nicht.
Der Standard definiert es jedoch als
Eine Variable, deren Name als potenziell ausgewerteter Ausdruck angezeigt wird, wird odr verwendet, es sei denn, es handelt sich um ein Objekt, das die Anforderungen für das Erscheinen in einem konstanten Ausdruck (5.19) erfüllt, und die Konvertierung von Wert zu Wert (4.1) wird sofort angewendet.
in [basic.def.odr].
Bearbeiten: Anscheinend ist dies der falsche Teil und der gesamte Absatz enthält mehrere Definitionen für verschiedene Dinge. Dies könnte für die Funktion der Klassenvorlagenmitglieder relevant sein:
Eine nicht überladene Funktion, deren Name als potenziell ausgewerteter Ausdruck oder Mitglied einer Reihe von Kandidatenfunktionen angezeigt wird, wird odr-verwendet, sofern es sich nicht um eine reine virtuelle Funktion handelt, wenn sie durch Überlastungsauflösung ausgewählt wird, wenn auf einen potenziell ausgewerteten Ausdruck verwiesen wird Funktion und ihr Name ist nicht explizit qualifiziert.
Ich verstehe jedoch nicht, wie diese Regel über mehrere Kompilierungseinheiten hinweg funktioniert. Werden alle Elementfunktionen instanziiert, wenn ich eine Klassenvorlage explizit instanziiere?