case113 โ internal function-template signature leaks via public API (BREAKING)¶
| Field | Value |
|---|---|
| Verdict | ๐ด BREAKING |
| Category | Breaking |
| Platforms | Linux, macOS, Windows |
| Flags | ABI break |
Detected ChangeKinds |
internal_template_leaks_via_public_api, func_removed |
| Source files | browse on GitHub |
What this case demonstrates¶
The function-template analogue of PR #238's type leak detection. A
helper template lives in lib::__detail:: โ conceptually private โ
but a public inline algorithm dispatches to it, so every consumer's
symbol table contains an instantiation of the "internal" template.
| v1 ships | v2 ships |
|---|---|
__detail::walk<int>, __detail::walk<float> |
__detail::walk<int>, __detail::walk<double> |
A consumer that wrote lib::sum_range<float>(...) linked against v1
ends up needing __detail::walk<float>; against v2 that symbol no
longer exists.
Why a dedicated finding¶
A plain func_removed for __detail::walk<float> invites the dismissal
"that's internal, ignore it". INTERNAL_TEMPLATE_LEAKS_VIA_PUBLIC_API
makes the leak path explicit and aggregates the per-instantiation
churn into a single finding per stem.
Expected verdict¶
BREAKING โ consumers fail to link or load.
Source files¶
See also: Examples overview ยท All BREAKING cases ยท Category: Breaking.