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