Current hardware trends make C++ exceptions harder to justify
&gt; Root cause<p>&gt; Traditional C++ exceptions have two main problems:<p>&gt; 1) the exceptions are allocated in dynamic memory because of inheritance and because of non-local constructs like std::current_exception. This prevents basic optimizations like transforming a throw into a goto, because other parts of the program should be able to see that dynamically allocated exception object. And it causes problems with throwing exceptions in out-of-memory situations.<p>&gt; 2) exception unwinding is effectively single-threaded, because the table driven unwinder logic used by modern C++ compilers grabs a global mutex to protect the tables from concurrent changes. This has disastrous consequences for high core counts and makes exceptions nearly unusable on such machines.<p>That&#x27;s really interesting. I&#x27;ve become very anti-exceptions in recent years far various much-discussed reasons (eg hard to follow, false economy, difficult if not impossible to write threadsafe C++ code in particular, use of exceptions as flow control is an anti-pattern).<p>One of the porposals is a value-or-error type object, which is basically what Rust has. I really like Rust&#x27;s enums and match expressions.<p>It seems so difficult to make changes like this to C++ at this point, at what point do you just have to start again?