Does std::cout have a return value?
c++, cout, return
Solution
Because the operands of `cout << cout` are user-defined types, the expression is effectively a function call. The compiler must find the best `operator<<` that matches the operands, which in this case are both of type `std::ostream`.
There are many candidate operator overloads from which to choose, but I'll just describe the one that ends up getting selected, following the usual overload resolution process.
`std::ostream` has a conversion operator that allows conversion to `void*`. This is used to enable testing the state of the stream as a boolean condition (i.e., it allows `if (cout)` to work).
The right-hand operand expression `cout` is implicitly converted to `void const*` using this conversion operator, then the `operator<<` overload that takes an `ostream&` and a `void const*` is called to write this pointer value.
Note that the actual value resulting from the `ostream` to `void*` conversion is unspecified. The specification only mandates that if the stream is in a bad state, a null pointer is returned, otherwise a non-null pointer is returned.
The `operator<<` overloads for stream insertion do have a return value: they return the stream that was provided as an operand. This is what allows chaining of insertion operations (and for input streams, extraction operations using `>>`).
Problem
I am curious if std::cout has a return value, because when I do this: ``` cout << cout << ""; ``` some hexa code is printed. What's the meaning of this printed value?