Warum erlaubt uns C ++, den Variablennamen beim Deklarieren einer Variablen in Klammern zu setzen?

Zum Beispiel eine Erklärung wie die folgende:

int (x) = 0;

Oder auch das:

int (((x))) = 0;

Ich bin darauf gestoßen, weil ich in meinem Code zufällig ein Fragment ähnlich dem folgenden hatte:

struct B
{
};

struct C
{
  C (B *) {}
  void f () {};
};

int main()
{
  B *y;
  C (y);
}

Offensichtlich wollte ich Objekt konstruierenC was dann etwas nützliches in seinem Destruktor machen würde. Wie auch immer, der Compiler behandeltC (y); als Deklaration der Variableny mit TypC und gibt somit einen Fehler über @ ay Neudefinition. Interessant ist, dass, wenn ich es als @ schreibC (y).f () oder als etwas wieC (static_cast<B*> (y)) es wird wie vorgesehen kompiliert. Die beste moderne Problemumgehung ist die Verwendung von{} im Konstruktoraufruf natürlich.

So wie ich später herausgefunden habe, ist es möglich Variablen wie @ zu deklarierint (x) = 0; oder auchint (((x))) = 0; aber ich habe noch nie jemanden gesehen, der Deklarationen wie diese verwendet. Also bin ich interessiert - was ist der Zweck einer solchen Möglichkeit, weil ich sehe, dass sie nur den Fall erzeugt, der dem berüchtigten "ärgerlichsten Parse" ähnelt, und nichts Nützliches hinzufügt?