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++.