So che sizeof
è un calcolo in fase di compilazione, ma questo mi sembra strano: il compilatore può prendere un nome di tipo o un'espressione (da cui deduce il tipo). Ma come si identifica un tipo all'interno di una classe? Sembra che l'unico modo sia di passare un'espressione, che sembra piuttosto goffo.Perché non taglia i membri di struct parse?
struct X { int x; };
int main() {
// return sizeof(X::x); // doesn't work
return sizeof(X()::x); // works, and requires X to be default-constructible
}
supporto per 'sizeof (X :: x)' è incluso in C++ 0x (cfr http://www.open -std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html). –
@James +1 al tuo commento. La mia risposta (cancellata) avrebbe dovuto essere un commento in realtà, perché Tom non menzionava C++ 0x. Forse lo vuole in C++ 98 :) – AraK
Sì, la mia domanda riguarda C++ 98. Tuttavia, anche se costruisco con '-std = C++ 0x', non funziona (GCC 4.3.2). Esistono implementazioni di compilatori che lo supportano ancora? – Tom