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?
 
Aucun commentaire:
Enregistrer un commentaire