endl

C++において、改行などの入出力制御操作は、endlを始めとするマニピュレータが行う。

endl - cpprefjp C++日本語リファレンス

endlは改行を表すマニピュレータだが、その正体は関数テンプレートである。
引数にストリームを指定すると、そのストリームで改行が行われるというのが、直接的な操作。
ただし、一般的に使われるのは、basic_ostreamの出力演算子の、endlの関数ポインタを引数に取る演算子オーバーロードが呼ばれ、その中で改行が行われるというものである。

1つ目は、endlなしで改行。
2つ目は、"FGHIJ"の出力時点では改行されないが、endlの引数にcoutを渡すと、この時点で改行される。
3つ目は、endlを関数ポインタと見立てて、出力演算子オーバーロードで改行されている。

$ vi endl.cpp
$ g++ endl.cpp -o endl
$ ./endl
ABCDE
FGHIJ
KLMNO
$

どれも改行されてる。

Sample/cpp/endl/endl/src/endl at master · bg1bgst333/Sample · GitHub