cout << "Hello World!" << endl;
Generally, since << is left-associative,
return X <<(ostream X, values)
... the left referenced ostream is returned and the next values in the chain added to it.
Consider
cout << b << c << endl;
(cout << b) << c << end;
Stream (buffer) contains b: (cout << c) << endl;
Stream (buffer) contains b, c cout << endl;
The manipulator endl writes the stream out from the memory buffer to the output stream.