Функция inline
может иметь несколько определений (C ++ 17 [basi c .def.odr] / 6). В этом смысле функции inline
могут использоваться для предотвращения нарушений ODR. Однако множественные определения функции inline
должны соответствовать друг другу. Для уточнения c, [basi c .def.odr] /6.2 гласит:
в каждом определении D
соответствующие имена, найденные в соответствии с 6.4, должны относиться к сущность, определенная в определении D
, или должна ссылаться на ту же сущность [...] [некоторые исключения]
Множественные определения get_v
относятся к переменной v
, но v
не определено в get_v
. Следовательно, требуется, чтобы каждое определение get_v
ссылалось на одну и ту же переменную v
. Это не тот случай, так как каждая единица перевода имеет свой v
. Таким образом, ODR нарушается.