Я думал о следующем. Рассмотрим два файла:
a.cpp:
template<class T> void g(T) {}
inline void f() { g(1); }
B.cpp:
template<class T> void g(T) {}
void g(int) {}
inline void f() { g(1); }
Без void g(int) {}
эта программа действует на 100%. С void g(int) {}
, g(1)
преобразуется в версию шаблона в A.cpp и в не шаблон в B.cpp.
Эта программа нарушает ODR? Почему?