add DBC (design-by-contract) and scope guards