Правило одного определения (One Definition Rule, ODR) требует, чтобы в программе каждая сущность (функция, переменная, класс, перечисление, шаблон и т.д.), имеющая внешнее связывание (external linkage) или не имеющая связывания (no linkage), была определена ровно один раз. Имеющие внутреннее связывание (internal linkage) или локальные переменные могут определяться в каждой единице преобразования (translation unit).
Особые случаи для ODR:
- Встраиваемые функции и переменные (inline functions and variables): Могут определяться в нескольких единицах преобразования, но все их определения должны быть идентичны с точки зрения токенов (token by token).
- Шаблоны (templates): Определения шаблонов (функций, классов, переменных, алиасов) могут присутствовать в нескольких единицах преобразования там, где они явно или неявно инстанцируются. Все такие определения должны быть идентичны.
- Типы с разным представлением (types with different representations): Нарушение ODR может привести к неопределенному пове
Правило одного определения (One Definition Rule, ODR) требует, чтобы в программе каждая сущность (функция, переменная, класс, перечисление, шаблон и т.д.), имеющая внешнее связывание (external linkage) или не имеющая связывания (no linkage), была определена ровно один раз. Имеющие внутреннее связывание (internal linkage) или локальные переменные могут определяться в каждой единице преобразования (translation unit).
Особые случаи для ODR:
- Встраиваемые функции и переменные (inline functions and variables): Могут определяться в нескольких единицах преобразования, но все их определения должны быть идентичны с точки зрения токенов (token by token).
- Шаблоны (templates): Определения шаблонов (функций, классов, переменных, алиасов) могут присутствовать в нескольких единицах преобразования там, где они явно или неявно инстанцируются. Все такие определения должны быть идентичны.
- Типы с разным представлением (types with different representations): Нарушение ODR может привести к неопределенному пове