Primitive definition now uses X-Macro magic