And of course there is still the difference between "has an inline directive" and "gets inlined" - it's merely a strong suggestion in most compilers.
Edit: it is correct though, that the inline keyword often is a neccessity to allow the compiler to inline in the first place. After all, the compiler can only inline a function at the callsite, when both are in the same translation unit. Either the function is only used in one translation unit, or it has to be defined as inline (or worse as hidden to the linker by static or anonymous namespace). Disregarding LTO, of course.
https://clang.llvm.org/docs/AttributeReference.html#always-i...