Overloading by return value in C++