Selection of which procedure to execute is made based on types of arguments.
We say the type signature determines the procedure to execute.
C++ even allows functions in the same scope to have same name, as long as type signature is different.
stream << integer; stream << char; stream << char *; stream << double; stream << complex;