Besides being deprecated in C++11 and removed in C++17, the intended use case for this was always wrong, since std::unexpected() is called by the C++ runtime when a function throws an exception that was not specified in its "dynamic exception specification", which is different from an exception thrown by user code which wasn't caught [1,2]. Using abort() keeps the same behavior, but with the intended semantics. We don't use std::abort() to simplify backwards compatibility. [1] https://github.com/epics-base/epics-base/issues/343 [2] https://en.cppreference.com/w/cpp/error/unexpected