## Compile-time usage When used with $cxx11, Better Enums are generated entirely during compilation. All the data is available for use by your own `constexpr` functions. The examples in *this* tutorial aren't very useful, but read the following tutorials to get an idea of what can be done. Here, you will see the basics. #include #ifndef BETTER_ENUMS_CONSTEXPR_TO_STRING #define BETTER_ENUMS_CONSTEXPR_TO_STRING #endif #include ENUM(Channel, int, Red = 1, Green = 2, Blue = 3) constexpr Channel channel = Channel::Green; constexpr int value = channel._to_integral(); constexpr const char *name = channel._to_string(); constexpr Channel parsed = Channel::_from_string("Red"); All of the above are computed during compilation. You can do apparently useless things such as: constexpr size_t length(const char *s, size_t index = 0) { return s[index] == '\0' ? index : length(s, index + 1); } constexpr size_t length_of_name_of_second_constant = length(Channel::_names()[1]); int main() { std::cout << length_of_name_of_second_constant << std::endl; return 0; } Which prints "5", the length of "Green". That 5 was also computed during compilation.