Co to znaczy „używać ODR”?

To właśnie pojawiło się w kontekścieinne pytanie.

Widocznie funkcje składowe w szablonach klas są tworzone tylko wtedy, gdy są używane ODR. Czy ktoś mógłby wyjaśnić, co to dokładnie znaczy. Theartykuł wikipedii na temat jednej reguły definicji (ODR) nie wspomina ”Wykorzystanie ODR„

Jednak standard definiuje go jako

Zmienna, której nazwa pojawia się jako potencjalnie oceniane wyrażenieodr-used chyba że jest to obiekt spełniający wymagania dotyczące pojawienia się w stałym wyrażeniu (5.19), a konwersja lvalue-to-rvalue (4.1) jest natychmiast stosowana.

w [basic.def.odr].

Edytuj: Najwyraźniej jest to niewłaściwa część, a cały akapit zawiera wiele definicji różnych rzeczy. Może to być odpowiedni dla funkcji członka szablonu klasy:

Nie przeciążona funkcja, której nazwa pojawia się jako potencjalnie oceniane wyrażenie lub członek zestawu kandydujących funkcji, jeśli została wybrana przez rozdzielczość przeciążenia, gdy odwołuje się do potencjalnie ocenianego wyrażenia, jest używana odr, chyba że jest to czysty wirtualny funkcja i jej nazwa nie jest wyraźnie kwalifikowana.

Nie rozumiem jednak, jak ta reguła działa w wielu jednostkach kompilacji? Czy wszystkie funkcje składowe są tworzone instancją, jeśli jawnie utworzę szablon klasy?

questionAnswers(2)

yourAnswerToTheQuestion