`std::underlying_type` invokes undefined behavior when used with a non enum type.
But where does the undefined behavior appears?

In this code :

```
template<typename E>
constexpr std::enable_if_t<std::is_enum<E>::value, std::underlying_type_t<E>> IntEnum(E e)
{
    return static_cast<std::underlying_type_t<E>>(e);
}

```

I tried to use `std::enable_if` to prevent the user from calling `IntEnum` with non-enum types. But as `enable_if` is evaluated before deciding if the function can be called, its template arguments get evaluated too, including `std::underlying_type_t<E>`. So is this UB if called with a non-enum type? How can i change it?