It'd be cleaner and simpler to test for negative than positive integers. "bool negative = n < 0;" extracts N's sign bit if N is signed and requires no machine instructions if N is unsigned; "bool positive = n > 0;" is trickier. I don't know what the context for this new macro is, and like Andreas I'm a bit puzzled as to its intended use.