Наприклад декларація типу:
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;але я ніколи не бачив, щоб хтось насправді використовував такі оголошення. Отже, мене цікавить - яка мета такої можливості, оскільки на даний момент я бачу, що вона створює лише випадок, подібний до горезвісного "найбільш неприємного розбору", і не додає нічого корисного?