I have a function that takes an ostream reference as an argument, writes some data to the stream, and then returns a reference to that same stream, like so:
#include <iostream>
std::ostream& print( std::ostream& os ) {
  os << " How are you?" << std::endl;
  return os;
}
int main() {
  std::cout << "Hello, world!" << print( std::cout ) << std::endl;
}
The output of this code is:
 How are you?
Hello, world!0x601288
However, if I separate the chaining expressions into two statements, like this
int main() {
  std::cout << "Hello, world!";
  std::cout << print( std::cout ) << std::endl;
}
then I at least get the proper order in the output, but still get a hex value:
Hello, world! How are you?
0x600ec8
I would like to understand what's going on here. Does a normal function take precedence over operator<<, and that's why the output order reverses? What is the proper way to write a function that inserts data into an ostream but that can also chain with operator<<?
 
     
     
     
     
     
    