Warum stehen in der Funktion zum Lesen von Dateien zusätzliche Klammern?

Ich verstehe, dass der folgende Code (von hier) wird verwendet, um den Inhalt einer Datei in einen String zu lesen:

#include <fstream>
#include <string>

  std::ifstream ifs("myfile.txt");
  std::string content( (std::istreambuf_iterator<char>(ifs) ),
                       (std::istreambuf_iterator<char>()    ) );

Ich verstehe jedoch nicht, warum solche scheinbar überflüssigen Klammern erforderlich sind. Der folgende Code wird beispielsweise nicht kompiliert:

#include <fstream>
#include <string>

  std::ifstream ifs("myfile.txt");
  std::string content(std::istreambuf_iterator<char>(ifs),
                      std::istreambuf_iterator<char>()    );

Warum werden zum Kompilieren so viele Klammern benötigt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage