Even with identical tokens for inline functions, ODR can be violated if lookup of names doesn’t refer to the same entity. let’s consider func in following:

void overloaded(int);
inline void func() { overloaded('*'); }
#include "header.h"

void foo()
{
    func(); // `overloaded` refers to `void overloaded(int)`
}
void overloaded(char); // can come from other include
#include "header.h"

void bar()
{
    func(); // `overloaded` refers to `void overloaded(char)`
}

We have an ODR violation as overloaded refers to different entities depending of the translation unit.