
Hi Just for the record, here is the souce code I ended up using. It is quite different from the compressed-tuple source, and the source code Larry suggested. It is most likely not as generric as these alternativies and it will only work with simple types as storege-buffer. But it has some features which is important for me: - Struct like groups EXAMPLE: CompressedEnums< unsigned, CompressedEnum<e1>, EnumStruct<e2, CompressedEnum<e1>, CompressedEnum<e2>, CompressedEnum<e3> >, CompressedEnum<e3>, CompressedEnum<e4> > ce2; ce2.set<e1>(e1::E1); std::cout << ce2.get<e1>() << std::endl; ce2.set<e2, e1>(e1::E1); std::cout << ce2.get<e2, e1>() << std::endl; - Unions like groups CompressedEnums< unsigned, CompressedEnum<e1>, EnumUnion<e2, CompressedEnum<e1>, CompressedEnum<Abc>, CompressedEnum<YesNoMaby> >, CompressedEnum<e3> > ce7; ce7.set<e2, Abc>(Abc::B); cout << ce7.get<e2, e1>() << " " << ce7.get<e2, Abc>() << " " << ce7.get<e2, YesNoMaby>() << endl; ce7.set<e2, Abc>(Abc::A); cout << ce7.get<e2, e1>() << " " << ce7.get<e2, Abc>() << " " << ce7.get<e2, YesNoMaby>() << endl; ce7.set<e2, YesNoMaby>(YesNoMaby::Maby); cout << ce7.get<e2, e1>() << " " << ce7.get<e2, Abc>() << " " << ce7.get<e2, YesNoMaby>() << endl; - Arrays (of leafs only) CompressedEnums< unsigned, CompressedEnum<e1>, CompressedEnumArray<Abc, 5>, CompressedEnum<e3> > ce6; ce6.data = 0; for (int i = 0; i < ce6.get_size<Abc>(); i++) { std::cout << ce6.get<4, Abc>() << ce6.get<3, Abc>() << ce6.get<2, Abc>() << ce6.get<1, Abc>() << ce6.get<0, Abc>() << std::endl; ce6.next<0, Abc>(); } Comments are always appreciated, but before you dive into the code, I should warn you that this is the first time I have tried to sue the boost::mpl for something ( other than playing around ). Thanks for all the help and inputs. Best regards Allan W. Nielsen