## 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 look at the [demos](${prefix}index.html#CompileTimeDemos) at the bottom of the main page to get an idea of what can be done. Here, you will see the basics. #include // The reason for this is explained below. #ifndef BETTER_ENUMS_CONSTEXPR_TO_STRING #define BETTER_ENUMS_CONSTEXPR_TO_STRING #endif #include BETTER_ENUM(Channel, int, Red = 1, Green = 2, Blue = 3) constexpr Channel channel = Channel::_from_integral(2); 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. The reason for the macro definition at the top of the file is explained on the [opt-in features page](${prefix}OptInFeatures.html#CompileTimeNameTrimming). Basically, it makes `_to_string` `constexpr`, but slows down compilation. You can also do 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. %% description = Better Enums can be used entirely at compile time in C++11. All conversion functions are available for constexpr functions or templates.