Na przykład deklaracja taka jak:
int (x) = 0;
Albo nawet to:
int (((x))) = 0;
Natknąłem się na to, ponieważ zdarzyło mi się, że w swoim kodzie miałem fragment podobny do następującego:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Oczywiście chciałem skonstruować obiekt, C
który wtedy zrobiłby coś pożytecznego w swoim destruktorze. Jednak jak to bywa, kompilator traktuje C (y);
jako deklarację zmiennej y
o typie C
i dlatego wypisuje błąd dotyczący y
redefinicji. Ciekawe jest to, że jeśli napiszę to jako C (y).f ()
lub jako coś podobnego C (static_cast<B*> (y))
, skompiluje się zgodnie z przeznaczeniem. Najlepszym współczesnym obejściem jest {}
oczywiście użycie wywołania konstruktora.
Więc jak się później domyśliłem, możliwe jest zadeklarowanie zmiennych takich jak int (x) = 0;
lub nawet, int (((x))) = 0;
ale nigdy nie widziałem nikogo, kto faktycznie używa takich deklaracji. Więc jestem zainteresowany - jaki jest cel takiej możliwości, bo na razie widzę, że tworzy ona tylko przypadek podobny do osławionej "najbardziej irytującej analizy" i nie dodaje niczego pożytecznego?