
values. What I want is something like this:
struct system1 : ordinal<get_next_system_ordinal()> { }; struct system2 : ordinal<get_next_system_ordinal()> { };
where I don't really care what the specific order is, just that the ordinal values are unique... Anyone have a bright idea on how to accomplish this? Preprocessor?
Hmm, I doubt you can do this with as much generality as you would like, especially since it would be hard to ensure uniqueness across multiple translation units. What about a solution like this: ///////////// struct ordinal_tag {}; template<class A> struct ordinal { static ordinal_tag const tag; template<class B> bool operator<(ordinal<B> const& other) { return &tag < &other.tag; } }; template<class A> ordinal_tag const ordinal<A>::tag = ordinal_tag(); struct system1 : ordinal<system1> { }; struct system2 : ordinal<system2> { }; struct system3 : ordinal<system3> { }; //////////////// This relies on being able to order pointers even when they don't point into the same array, which is technically undefined behavior. Now that I think about it, don't people use std::map<void*,T> all the time? How do they make sure that is portable? -Lewis