I don't think there's a function in the standard library for this, how about this:
proc incWithWrap[T: enum](v: var T) =
if v == high(T):
v = low(T)
else:
inc v
And I have never wanted it to wrap in my entire life. In fact, saturated arithmetic is often more useful and equally unsupported.
You can also use type T = distinct uint8 and .borrow the inc operator so that you get a new type that wraps.
I think it probably shouldn't be the default? Say there's a case where I don't want an enum to wrap, and I write some code that accidentally increments it beyond its maximum value. If it wraps by default, then I've just introduced silently buggy behaviour into my program, while a fatal error would have allowed me to hunt down the issue a lot quicker.
Additionally, if I compile with -d:danger, the compiler can remove the error checking for better performance, but it couldn't remove the wrapping logic because that would break the cases where I intentionally let it wrap.
That said, I agree that wrapping versions of inc and dec (and succ and pred) are a pretty common requirement so it would make sense to have something like that in the stdlib.