de análisis más acuciantes
Esto se relaciona con lo que se conoce como "análisis sintáctico más irritante C++ 's". Básicamente, cualquier cosa que pueda ser interpretada por el compilador como una declaración será interpretada como una declaración.
Otro ejemplo del mismo problema:
std::ifstream ifs("file.txt");
std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());
v
se interpreta como una declaración de la función con 2 parámetros.
La solución consiste en añadir otro par de paréntesis:
std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());
O, si usted tiene 11 C++ y la lista de inicialización (también conocida como la inicialización uniforme) disponibles:
std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};
Con esto, no hay forma de que pueda ser interpretado como una declaración de función.
Alguien debería venir con un mejor título para esto, pero no puedo pensar en lo que sería. Al menos deletree "constructor" para ayudar a los motores de búsqueda. –
Y este es solo otro buen ejemplo donde C++ es sensible al contexto. El código de ejemplo en la pregunta también fallaría si 'blah' fuera una clase. – Albert