To właśnie pojawiło się w kontekście innego pytania .
Wygląda na to, że funkcje składowe w szablonach klas są tworzone tylko wtedy, gdy są używane przez ODR. Czy ktoś mógłby wyjaśnić, co to dokładnie oznacza. Artykuł Wikipedii na temat reguły jednej definicji (ODR) nie wspomina o „ używaniu ODR ”.
Jednak standard definiuje to jako
Zmienna, której nazwa pojawia się jako wyrażenie potencjalnie wartościowane, jest używana jako odr, chyba że jest obiektem, który spełnia wymagania dotyczące pojawienia się w wyrażeniu stałym (5.19), a konwersja lwartość do rwartości (4.1) jest natychmiast stosowana.
w [basic.def.odr].
Edycja: Najwyraźniej jest to zła część, a cały akapit zawiera wiele definicji różnych rzeczy. To może być odpowiednie dla funkcji składowej szablonu klasy:
Nieprzetężona funkcja, której nazwa pojawia się jako potencjalnie ocenione wyrażenie lub element członkowski zestawu funkcji kandydujących, jeśli zostanie wybrana przez rozpoznanie przeciążenia w przypadku odwołania z potencjalnie ocenianego wyrażenia, jest używana przez ODR, chyba że jest to czysta wirtualna funkcja, a jej nazwa nie jest jawnie kwalifikowana.
Nie rozumiem jednak, jak ta reguła działa w wielu jednostkach kompilacji? Czy instancje wszystkich funkcji składowych są tworzone, jeśli jawnie utworzę wystąpienie szablonu klasy?