Forth enumerant

In Forth Dimensions Vol 14 issue 1 (p. 37) there is an interesting piece of code to automatically assign enumerants:

: enum create 0 , does> create dup @ 1 rot +! , does> @ ;

So now instead of writing:

0 constant red 1 constant blue 2 constant green 0 constant round 1 constant square 2 constant oval

you can write:

enum color enum shape color red color blue color green shape round shape square shape oval

But its double does> is rather confusing. In fact the standard word constant makes things shorter:

: enum create 0 , does> dup @ 1 rot +! constant ;

The idiom dup @ 1 rot +! is similar to writing *x++ in C. It can be useful in other places, so a further factoring is:

: postinc ( a -- x ) \ increment a, return its original value dup @ 1 rot +! ; : enum create 0 , does> postinc constant ;