// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
#[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!("Error: {}", err);
process::exit(1);
}
}
Функции C++, объявленные как возвращающие Result, перехватывают любое исключение на стороне C++ и возвращают его вызывающей функции Rust как значение Err.
Если исключение выброшено из функции extern "C++", которая не объявлена мостом CXX как возвращающая Result, программа вызывает std::terminate в C++. Поведение эквивалентно тому, как если бы исключение вылетело из функции C++ с noexcept.