drängendsten Parst
Dies bezieht mich auf, was als "C++" s drängendsten Parst" bekannt ist. Grundsätzlich wird alles, was vom Compiler als Deklaration interpretiert werden kann, als Deklaration interpretiert.
Eine andere Instanz desselben Problems:
std::ifstream ifs("file.txt");
std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());
v
wird als eine Erklärung der Funktion mit 2 Parameter interpretiert.
Die Abhilfe ist ein anderes Paar von Klammern hinzuzufügen:
std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());
Oder, wenn Sie C++ 11 und list-Initialisierung (auch als einheitliche Initialisierung bekannt) zur Verfügung:
std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};
Damit kann es nicht als Funktionsdeklaration interpretiert werden.
Jemand sollte einen besseren Titel dafür finden, aber ich kann nicht denken, was das sein würde. Zumindest "Konstruktor" buchstabieren, um die Suchmaschine (n) zu helfen. –
Und das ist nur ein anderes gutes Beispiel, wo C++ kontextsensitiv ist. Der Beispielcode in der Frage würde auch fehlschlagen, wenn "blah" eine Klasse wäre. – Albert