Обробка помилок в 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!("Помилка: {}", err);
        process::exit(1);
    }
}
  • Функції C++, оголошені як такі, що повертають Result, перехоплять будь-яке згенероване виключення на стороні C++ і повернуть його у вигляді значення Err до викликаючої функції Rust.
  • Якщо виключна ситуація виникає з функції extern "C++", яка не оголошена мостом CXX і повертає Result, програма викликає std::terminate у C++. Поведінка еквівалентна тій самій виключній ситуації, яка виникає через функцію C++ noexcept.