typedef needed to get macros to expand