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