Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Если предположить, что в приведенном примере один инкремент iBits++ лишний,
Нда. Копи-пэст

. Я уже когда запостил, то заметил, что лажанулся. Но подумал, что на дело это не должно повлиять.
ПК>то код может быть таким:
ПК>ПК>template<unsigned n>
ПК>struct NBits
ПК>{
ПК> enum { value = NBits<(n >> 1)>::value + 1 };
ПК>};
ПК>template<>
ПК>struct NBits<0>
ПК>{
ПК> enum { value = 0 };
ПК>};
ПК>unsigned iBits = NBits<sizeof(array) / sizeof(array[0])>::value;
ПК>
Бальшой сенкс!
Но я тебя еще помучаю...
А зачем нужна специализация? Ну, "NBits<0>"? Это борьба с кем-то или еще что?
И вообще, обясни принцип действия, а то я как-то не дотягиваю. Вроде все просто, но... А может к вечеру уже бошка не варит.
Кстати, сработало даже в managed-C++. Причем я даже не нашел следа от enum-а.

Жаль, что в Шарпе так нельзя. Да и препроцессор они от туда зря выбрасели.

Ну, да ладно. Сделают шаблоны, можно быдет такие же кренделя в рантайме отмачиать (надеюсь)...
ПК>Искомое константное выражение выделено жирным.
Ну, это и так ясно.