deal more cleanly with compiler choice