#[cxx::bridge] doesn't apply #[cfg(not(feature))]
Author: hombitCreated Jan 3, 2024Updated Aug 17, 2026
Labelshelp wanted
It looks like #[cfg(not(feature))] is ignored by #[cxx::bridge], so the marked field would always exist:
mod ffi {
#[repr(u32)]
enum Variant {
#[cfg(not(feature = "v2"))]
A,
B,
}
}See this demo repo for a reproducible example.
#[cfg(not(feature))] is useful when a newer version of a C++ library dropped something, while we would like to support both new and old versions with Cargo feature flags.
Source: dtolnay/cxx