I do understand what ODR says, but I don\'t understand what it tries to achieve.
I see two consequences of violating it - user will get syntax error, which is totall
To put it simply, the One Definition Rules guarantees:
That entities that should be defined only once in the program are defined exactly once.
That entities that can be defined in multiple Translation Units (classes, inline functions, template functions) have equivalent definitions that result in equivalent compiled code. The equivalence has to be perfect to be able to use any one definition at run time: the many definitions are indistinguishable.