Manipulatoren: Was steckt hinter den Manipulatoren? (2/3)

Klingt theoretisch sehr kompliziert, wird aber vielleicht durch Betrachten des folgenden Beispiels deutlicher.
Wir betrachten hierzu die Definition der Funktion endl() und des zugehörigen Manipulators:

  ostream& endl (ostream& strm)
  {
      // newline ausgeben
      strm << '\n';

      //Ausgabepuffer leeren
      strm.flush();

      // strm für Verkettung zurückliefern
      return strm;
  }

Durch die Anweisung

  cout << endl;

wird die Funktion, die der Manipulator repräsentiert, mit dem zu manipulierenden Stream als Parameter aufgerufen:

  endl(cout);