Это просто возникло в контексте другого вопроса .
Очевидно, функции-члены в шаблонах классов создаются только в том случае, если они используются ODR. Может кто-нибудь объяснить, что именно это означает. В статье в Википедии о Правиле одного определения (ODR) не упоминается « использование ODR ».
Однако стандарт определяет это как
Переменная, имя которой отображается как потенциально оцениваемое выражение, используется odr, если только это не объект, который удовлетворяет требованиям для появления в постоянном выражении (5.19), и немедленно применяется преобразование lvalue-to-rvalue (4.1).
в [basic.def.odr].
Изменить: по-видимому, это неправильная часть, и весь абзац содержит несколько определений для разных вещей. Это может быть актуально для функции-члена шаблона класса:
Неперегруженная функция, имя которой отображается как потенциально оцениваемое выражение или член набора функций-кандидатов, если она выбрана разрешением перегрузки при ссылке из потенциально оцениваемого выражения, используется odr, если только это не чисто виртуальный функция и ее имя не уточняются явно.
Однако я не понимаю, как это правило работает с несколькими единицами компиляции? Все ли функции-члены создаются, если я явно создаю экземпляр шаблона класса?