Writing RAII style C++ is fine and good, but having no common pattern to effectively handle errors in constructors sucks. You can see it all over Bitcoin Core's codebase. There are like five different ways to handle these errors and none of them are really ergonomic.