Bonjour à tous!

Étant donné le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
#include <iostream>
#include <string>
#include <iterator>

int main ()
{
   std::ifstream In ( "MonFichier.txt" );
   std::string MaChaine ( std::istreambuf_iterator<char>( In ), (std::istreambuf_iterator<char>()) );
   std::cout << MaChaine;
}
Si on enlève les parenthèses qui entourent "std::istreambuf_iterator<char>()". Avec Visual C++ 2005, il y a une erreur à l'éditeur de liens:
error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl MaChaine(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> > (__cdecl*)(void))" (?MaChaine@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std @@V?$istreambuf_iterator@DU?$char_traits@D@std@@@2@P6A?AV32@XZ@Z)
Avec gcc, ça passe à la compilation, avec un warning (je ne l'ai pas avec moi présentement), mais le programme ne fait pas du tout le résultat attendu par celui-ci.


Comment cela se fait-il que les parenthèses, qui entourent "std::istreambuf_iterator<char>()", ne sont pas facultatives?


Merci,
Mathieu