eval in macro can easily evaluate in the wrong scope. It is totally OK if the intended sematic is to evaluate the part of the expression only in top-level (global) scope, which includes macros that should only be used in global scope, like @enum. You should also make sure the eval is done in the right module (current_module() pre-0.7 and __module__ post-0.7).
Thanks I was not aware of that! There is also QuickTypes.jl, which I find useful. The advantage of the above approach is that the typedef itself does not need to be decorated, making it easier to combine with other typedef tweaks.