add _Generic macro