Почему C ++ позволяет нам заключать имя переменной в круглые скобки при объявлении переменной?

Например, такое объявление:

int (x) = 0;

Или даже это:

int (((x))) = 0;

Я наткнулся на это, потому что в моем коде у меня был фрагмент, подобный следующему:

struct B
{
};

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

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

Очевидно, я хотел построить объектC&nbsp;который тогда сделал бы что-то полезное в своем деструкторе. Однако как это происходит компилятор лечитC (y);&nbsp;как объявление переменнойy&nbsp;с типомC&nbsp;и таким образом он печатает ошибку оy&nbsp;переопределение. Интересно, что если я напишу это какC (y).f ()&nbsp;или как что-то вродеC (static_cast<B*> (y))&nbsp;он будет скомпилирован как задумано. Лучший современный обходной путь заключается в использовании{}&nbsp;в вызове конструктора, конечно.

Итак, как я понял после этого, можно объявить переменные какint (x) = 0;&nbsp;или дажеint (((x))) = 0;&nbsp;но я никогда не видел, чтобы кто-то действительно использовал подобные объявления. Так что мне интересно - какова цель такой возможности, потому что пока я вижу, что она создает только случай, похожий на пресловутый «самый неприятный анализ», и не добавляет ничего полезного?