Before you seriously consider namespaces, infix functions are a good thing. However, once you start considering the interaction between infix functions and namespaces, you will find it extremely uncomfortable.
For operator overloading, C++ designed ADL, a complete disaster!
zig’s thinking on “treating types as namespaces themselves” has actually largely bridged the gap between namespaces and infix functions as much as possible.
self.method(x) is already an infix function in itself. The type itself is a namespace. At this point, the first function parameter of this type can be advanced, making the usage of the function infix. This is the clearest answer. The only drawback is the lack of a bit of possible extensibility, but the problem is not that big. We can simulate it with wrapper.