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