"Inlining" and "duplicate symbols" are different things. The inline
keywords explicitly allows multiple definitions (i.e. it exempts you from the one-definition rule), so the platform (compiler and linker) must know how to handle and deduplicate that.
(This happens all the time for class member functions that are defined in headers.)
If you just want code generation to happen, you can store the address of the function somewhere:
auto fp = my_inline;
That way the compiler must generate a definition of the function, so as to be able to give it an address. But even if you do this in every translation unit, you won't get a linker error, as this will be deduplicated at link time. The requirement that all definitions be identical makes sure that this is well-defined.