Це просто виникло в контексті іншого питання .
Очевидно, функції-члени в шаблонах класів створюються лише тоді, коли вони використовуються ODR. Хтось може пояснити, що саме це означає. У статті Вікіпедії про Правило одного визначення (ODR) не згадується " використання ODR ".
Однак стандарт визначає це як
Змінна, назва якої відображається як потенційно обчислюваний вираз, використовується з підтримкою, якщо це не об’єкт, який задовольняє вимогам щодо появи у константному виразі (5.19) і перетворення lvalue-to-rvalue (4.1) негайно застосовується.
у [basic.def.odr].
Редагувати: очевидно, це неправильна частина, і весь абзац містить кілька визначень різних речей. Це може бути відповідним для функції-члена шаблону класу:
Неперевантажена функція, назва якої відображається як потенційно оцінений вираз або член набору функцій-кандидатів, якщо вона вибрана за допомогою дозволу перевантаження при посиланні з потенційно оціненого виразу, використовується, якщо вона не є суто віртуальною функція і її назва не є явно визначеною.
Однак я не розумію, як це правило працює в декількох одиницях компіляції? Чи всі функції-члени мають інстанцію, якщо явно створюю екземпляр шаблону класу?