ex 4_14 macro use for swapping values with type done