Por ejemplo, una declaración como esa:
int (x) = 0;
O incluso eso:
int (((x))) = 0;
Me encontré con esto porque en mi código tenía un fragmento similar al siguiente:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Obviamente, quería construir un objeto C
que luego haría algo útil en su destructor. Sin embargo, como sucede, el compilador la trata C (y);
como una declaración de variable y
con tipo C
y, por lo tanto, imprime un error sobre la y
redefinición. Lo interesante es que si lo escribo como C (y).f ()
o como algo parecido C (static_cast<B*> (y))
, se compilará según lo previsto. La mejor solución alternativa moderna es utilizar{}
en la llamada al constructor, por supuesto.
Entonces, como descubrí después de eso, es posible declarar variables como int (x) = 0;
o incluso, int (((x))) = 0;
pero nunca he visto a nadie usar declaraciones como esta. Así que estoy interesado, ¿cuál es el propósito de tal posibilidad porque por ahora veo que solo crea el caso similar al notorio "análisis más irritante" y no agrega nada útil?