> or allow the programmer to specify which one should be used with an annotation.
That's exactly:
> give all of those functions different names.
That's exactly:
> give all of those functions different names.
Classes, namespaces, modules, etc. allow names to have a more fine-grained structure, e.g. "int.add" and "int.divide" come from the same module, whilst "int.add" and "float.add" are alternative implementations of the same signature.
Maybe in a functional programming language like Haskell. But not in C++.
What I described is actually closer to ML.