Skip to content

case116 — C++ standard floor raised (per-binary: NO_CHANGE)

Field Value
Verdict NO_CHANGE
Category No Change
Platforms Linux, macOS, Windows
Flags
Detected ChangeKinds
Source files browse on GitHub

What this case demonstrates

v1.h and v2.h declare an identical public surface. The difference is the build contract: v2 is compiled with -std=c++20 (via V2_COMPILE_OPTIONS in CMakeLists.txt), so the .so was produced under a higher C++ standard floor than v1. Consumers still building with C++17 see no symbol churn but a freshly compiled TU against the new headers will hit any C++20-only constructs the library starts to require.

Why per-binary detection cannot see this

The symbol set, vtable, and declared interface are unchanged between v1 and v2, so every conventional ABI diff returns NO_CHANGE. The break-grade signal only appears when abicheck is fed a matrix of per-configuration snapshots (one per consumer toolchain): the CXX_STANDARD_FLOOR_RAISED detector compares the minimum cxx_std across configurations and emits the finding when the floor moves up.

The probe-harness mechanism that produces matrix snapshots lives in abicheck.probe_harness; it is not yet wired into the default compare CLI (deferred follow-up — see PR #247).

Expected verdict

NO_CHANGE — single-config diff is correctly silent. The case is a fixture for the matrix-detector channel.


Source files

See also: Examples overview · All NO_CHANGE cases · Category: No Change.