Tratamento de Erros do C++

#[cxx::bridge]
mod ffi {
    unsafe extern "C++" {
        include!("example/include/example.h");
        fn fallible(depth: usize) -> Result<String>;
    }
}

fn main() {
    if let Err(err) = ffi::fallible(99) {
        eprintln!("Erro: {}", err);
        process::exit(1);
    }
}
  • As funções C++ declaradas para retornar um Result capturarão qualquer exceção lançada no lado C++ e a retornarão como um valor Err para a função
  • Se uma exceção for lançada de uma função externa “C++” que não é declarada pela bridge CXX para retornar Result, o programa chama std::terminate do C++. O comportamento é equivalente à mesma exceção sendo lançada por meio de uma função noexcept C++.