Skip to content

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.