only use underlying_type on gcc > 4.6.3