Alleviates the need to static_cast to an enum type at the call sites of the Push and Pop calls. We only allow strongly typed enums, as they have a defined type of int by default if an underlying type isn't explicitly specified, whereas with regular enums, if an underlying type isn't specified, an implementation-defined type is used that can fit all the enumeration values.