Представьте себе оператор countof (по аналогии с sizeof), который возвращает количество элементов в какой-то составной сущности.
Для массивов в С/С++ этот оператор часто реализуют в виде макроса
#define _countof(array) (sizeof(array) / sizeof(array[0]))
Но кроме массивов, есть еще много составных сущностей в разных языках программирования.
И вот тут начинаются вопросы. А что считать элементами структуры, класса и т.д.?
Для примитивных типов логично чтобы этот оператор возвращал ноль.
Для перечислений — количество элементов в перечислении (это бывает полезно).
Для структур и классов... тут начинается самое интересное.
С одной стороны, можно подсчитывать количество именованных полей данных.
С другой — количество имен внутри пространства имен, образуемого классом. А ведь там могут быть и вложенные классы, и статические поля, и методы, и статические методы, и всякие свойства, и т.д. Еще — как учитывать поля родительских классов при наследовании (ИМХО учитывать). Еще — учитывать ли скрытые поля, генерируемые компилятором (ИМХО тоже учитывать).
То есть в это количество будут входить получаются совершенно разные сущности.
Тем ни менее, при наличии развитой рефлексии и макросов времени компиляции такой оператор мог бы быть полезен.
В общем, я иногда задумываюсь над тем, как бы мог быть реализован подобный оператор. Интересно ваше мнение.