C++ Language/ProgramFlow/FunctionOverloading/DiscriminationCriteria
When an overloaded function is called, the compiler is able to choose which implementation to use, based on the types of values passed to it. However, this overloading cannot discriminate between two implementations based only on return types.
Additional information about overloaded function discrimination (includes interactive examples)