// Range properties and iteration over all constants. #include #include ENUM(Channel, int, Red = 3, Green = 4, Blue = 0); int main() { // Static range properties. std::cout << "first: " << enum_::to_string(enum_::traits::first) << std::endl; std::cout << "last: " << enum_::to_string(enum_::traits::last) << std::endl; std::cout << "minimum: " << enum_::to_string(enum_::traits::min) << std::endl; std::cout << "maximum: " << enum_::to_string(enum_::traits::max) << std::endl; std::cout << "count: " << enum_::traits::size << std::endl; std::cout << "span: " << enum_::traits::span << std::endl; // Listing declared values. for (Channel channel : enum_::traits::values) std::cout << enum_::to_integral(channel) << " "; std::cout << std::endl; // Listing declared names. for (const char *name : enum_::traits::names) std::cout << name << " "; std::cout << std::endl; // Direct iterator usage. std::cout << "first (using iterator): " << *enum_::traits::names.begin() << std::endl; return 0; }