These need to be macros, or I remove them. I won't write 100 lines boilerplate handling all types for something that can be done with a 1 line macro and somebody else checks the types.