// This file was generated automatically
// 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.