Например, объявление, например:
int (x) = 0;
Или даже это:
int (((x))) = 0;
Я наткнулся на это, потому что в моем коде у меня был фрагмент, похожий на следующий:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Очевидно, я хотел построить объект C
, который затем сделал бы что-то полезное в своем деструкторе. Однако, как это бывает, компилятор рассматривает C (y);
как объявление переменной y
с типом C
и, следовательно, печатает ошибку о переопределении y
. Интересно, что если я напишу его как C (y).f ()
или как-то вроде C (static_cast<B*> (y))
, он будет компилироваться по назначению. Лучшее современное решение - использовать {}
в вызове конструктора, конечно.
Итак, после того, как я понял, возможно объявить переменные типа int (x) = 0;
или даже int (((x))) = 0;
, но я никогда не видел, чтобы кто-то действительно использовал объявления вроде этого. Поэтому мне интересно - какова цель такой возможности, потому что на данный момент я вижу, что она только создает случай, похожий на пресловутый "самый неприятный синтаксический разбор" и не добавляет ничего полезного?