Я думал о следующем. Рассмотрим два файла:
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? Почему?