At one point I had looked at implementing a class/template in C++ that would support an Enum that would behave like it does in Ada. It has been some time since I thought abo
One of my colleagues has implemented a tool to generate classes that do most (if not all) of what you want:
http://code.google.com/p/enumgen/
The current implementation is in Lisp, but do not hold that against him :-)