Was bedeutet es, etwas „ODR-tauglich“ zu machen?

Dies kam gerade im Zusammenhang miteine andere Frage.

Anscheinend werden Member-Funktionen in Klassenvorlagen nur instanziiert, wenn sie ODR-verwendet werden. Könnte jemand erklären, was genau das bedeutet. DasWikipedia-Artikel zu One Definition Rule (ODR) nicht erwähnt "ODR-Nutzung".

Die Norm definiert es jedoch als

Eine Variable, deren Name als potenziell ausgewerteter Ausdruck angezeigt wird, lautetodr-used es sei denn, es handelt sich um ein Objekt, das die Anforderungen für die Darstellung in einem konstanten Ausdruck (5.19) erfüllt, und die Umwandlung von lWert in rWert (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 ist möglicherweise die für die Memberfunktion der Klassenvorlage relevante Funktion:

Eine nicht überladene Funktion, deren Name als potenziell ausgewerteter Ausdruck oder als Mitglied einer Gruppe von Kandidatenfunktionen angezeigt wird, wird, sofern auf einen potenziell ausgewerteten Ausdruck verwiesen wird, als ODR-Funktion verwendet, sofern es sich nicht um eine reine virtuelle Funktion handelt Funktion und ihr Name ist nicht explizit qualifiziert.

Ich verstehe aber nicht, wie diese Regel über mehrere Zusammenstellungseinheiten hinweg funktioniert? Werden alle Memberfunktionen instanziiert, wenn ich eine Klassenvorlage explizit instanziiere?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage