If I have a normal (weak) enumeration, I can use its enumerated values as non-type template parameters, like so:
enum { Cat, Dog, Horse };
template
You can do it like this, if you can use C++17
#include
enum class Animal { Cat, Dog, Horse };
template
void magic_impl()
{
static_assert(std::is_same_v);
static_assert(EnumVal == Animal::Cat);
}
template
void magic()
{
magic_impl();
}
int main()
{
magic();
}
demo: http://coliru.stacked-crooked.com/a/9ac5095e8434c9da