Por que são parênteses extras na função de leitura de arquivos?
Eu entendo que o seguinte código (daqui) é usado para ler o conteúdo de um arquivo para string:
#include <fstream>
#include <string>
std::ifstream ifs("myfile.txt");
std::string content( (std::istreambuf_iterator<char>(ifs) ),
(std::istreambuf_iterator<char>() ) );
No entanto, não entendo por que esses parênteses aparentemente redundantes são necessários. Por exemplo, o código a seguir não compila:
#include <fstream>
#include <string>
std::ifstream ifs("myfile.txt");
std::string content(std::istreambuf_iterator<char>(ifs),
std::istreambuf_iterator<char>() );
Por que tantos parênteses são necessários para isso compilar?