Marking the symbol as weak is what inline indeed does from a technical point of view.
I’m actually also not familiar with weak, but a quick glance suggests that it might not mean the same thing as inline. Can weak symbols be defined multiple times? EDIT: yes, according to an SO post compilers often use weak to implement inline.
Beginners fail to understand for example that providing a class member function definition within the class definition makes it inline, but that's already what you're doing textually, and that's what the keyword means.
It's only needed for functions defined in header files where multiple definitions may exist after compiling object files.
Member and template functions are special cased to be implicitly inline.
Non-inline definitions need to be in their own translation unit.