at first i thought that the boost library came with it's own implementation of a c preprocessor, as i thought that was the only way it could be doing all that iteration (multiple "patterned" declarations, etc, etc) and the c standard hasn't introduced a notion of counters... i've considered concatenation, but that incurs a "final" string to be compared which cannot be generated automatically a priori (correct me if i'm mistaken). but when i looked at boost thoroughly, it seems to be doing everything in standard. so can anybody tell me how that is done? a sort of pseudo-code for doing this will be very helpful: #define MULTIPLE_ENUMS(my_enum, n) /* ^ will declare n enumerations using prefix "my_enum" and having concatenated 0 to n each. optional: having ALL the minimum value of each enum be 0 (easy) and maximum values for each multiplied by a magnitude of 2 starting from an initial value (which then becomes): #define MULTIPLE_ENUMS(my_enum, init, 5) */ i know this may sound trivial and totally beginner-like, but can anyone explain it to me, as i don't have the whole day just trying to decipher everything out.