Some obstacles to clear and concise code.
# Noncritical function design We call functions for many reasons. Two very common reasons are "object creation" and "object modification". ## Creation functions A creation function promises to produce some new object. If it cannot produce the new object, it should fail. Please note that this is not limited to constructors. It can be a function, for example, with a signature like this (C++): `auto read_file(std::filesystem::path const& filename) -> std::vector<std::byte>;` ## Modification functions A modification function promises to make a certain change to an existing object. If it cannot make the promised change, it should fail. The target object should either be in its original condition, or it should be considered to be in a valid-but-unknown state after the call, and the caller should probably just destroy it. Each modification function should pick one of these techniques for maintaining the target object after failure. In C++ land, these are calle...