Только распространять исключения для вызывающего, если вызывающий объект предназначен для их обработки. Думаю, в вашем случае terminate()
будет вызываться сразу же, как только любое исключение выйдет из кода C ++, потому что из точки выполнения C ++ это исключение не было обработано.
Такая же ситуация возникает в дизайне серверов COM - клиенты может быть на любом языке / технологии. Правило заключается в том, что никакие исключения не должны выходить из методов COM-сервера - все исключения должны быть пойманы и переведены в HRESULT и (необязательно) IErrorInfo . Вы также должны делать это в своих ситуациях.
В случае, если код C зажат между двумя слоями кода C ++ , распространяя исключения на C-код, все еще очень плохая идея .