Я знаю, что sizeof
- это вычисление времени компиляции, но мне это кажется странным: компилятор может принимать либо имя типа, либо выражение (из которого он выводит тип). Но как вы определяете тип в классе? Кажется, единственный способ - передать выражение, которое кажется довольно неуклюжим.
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
}