Handling const-ness
The opts argument to the visit functions relays const-ness to the visitor without requiring different routines and type objects for const and non-const visitation.
If opts == XVF_NON_CONST in V->visit(T *data, int opts), V->visit() has license to modify *data.
For example: an inspector visitor may generate an editable or non-editable field depending if opts == XVF_NON_CONST or opts == XVF_CONST.