Ideally, the C++11 or C++14, just re-implemented the thing in boost for many years. Either pure C++14, or boost, so easy to choose. According the experience from our real product, still stick to boost is the best.
So, to the real program, once you decided to use C++11 or C++14, you should consider always stick to it, and never mix the critical pat with boost's implementation. Back to the error code, it's best to stick one type of exception, since even the bridge would be also maintained by time.
Today's C++ standard is never solid and published carefully, its quality degenerated a lot compared to the past, so it's the best to use something real reliable and able to finish the product, spend the least time and resource to handle the useless detail, even could be resolved at the very beginning.