Conversation
…eaders
Mark every forwarding header under include/container/ with a deprecation
notice and document the removal target in CHANGELOG.md.
Currently only one forwarding header remains:
- include/container/optimizations/fast_parser.h
Because this header is a pure '#include' forwarder, the C++ '[[deprecated]]'
attribute cannot attach to it. Use '#pragma message("warning: ...")'
instead — portable across GCC, Clang, and MSVC — so downstream consumers
get a build-time warning when they include the legacy path.
Migrate the only in-repo legacy use (tests/fast_parser_integration_tests.cpp)
to the canonical '<kcenon/container/optimizations/fast_parser.h>' so the
in-repo build does not generate the new warning.
Add a 'Deprecated' entry under [Unreleased] in both CHANGELOG.md
(downstream-tooling SSOT) and docs/CHANGELOG.md (registry SSOT) listing
the deprecated header, the canonical replacement, and the removal target
(next minor release after v1.1.0).
Closes #534
Part of #531
3 tasks
This was referenced May 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Summary
Mark every legacy forwarding header in
include/container/as deprecated and document the removal target in bothCHANGELOG.md(downstream-tooling SSOT) anddocs/CHANGELOG.md(registry SSOT). Migrate the only in-repo translation unit that still used the legacy path so the in-repo build itself stays warning-free.Change Type
Affected Components
include/container/optimizations/fast_parser.h— the only file currently under the legacyinclude/container/treetests/fast_parser_integration_tests.cpp— in-repo legacy include migrated to canonical pathCHANGELOG.md— new "Deprecated" entry under [Unreleased]docs/CHANGELOG.md— mirrored "Deprecated" entry under [Unreleased]Why
Problem Solved
The legacy
include/container/path predates the canonicalinclude/kcenon/container/layout. Today the same headers can be reached via two roots, and downstream consumers keep depending on the legacy path because nothing has signalled that it is going away. After this PR:<container/...>gets a portable build-time warning to migrate.CHANGELOG.mdrecords the deprecation and the planned hard-removal release.Related Issues
Where
include/container/optimizations/fast_parser.h#pragma message("warning: …")deprecation notice + Doxygen@deprecatedblocktests/fast_parser_integration_tests.cpp<include/container/...>→<kcenon/container/...>CHANGELOG.md### Deprecatedsection under[Unreleased]docs/CHANGELOG.md### Deprecatedentry under[Unreleased]How
Per-header deprecation mechanism
The single forwarding header that currently exists in
include/container/is a pure#includeforwarder (no own type aliases / using-decls / function declarations). The C++[[deprecated]]attribute cannot attach to an#includedirective, so attribute-based deprecation is not applicable here. The portable alternative is#pragma message("warning: ..."), which works on GCC, Clang, and MSVC. (#warningis intentionally avoided because not all toolchains in CI accept it consistently — MSVC requires#pragma message.)Mechanism per header:
include/container/optimizations/fast_parser.h#pragma message("warning: …")#includeforwarder; attribute cannot attachIf future sub-issues introduce additional forwarders that re-export type aliases or function declarations, those should prefer
[[deprecated("...")]]on the declaration; only fall back to#pragma messagewhen the construct cannot carry an attribute.Removal target version
Project version is currently
1.0.0(released 2026-04-16, seeCHANGELOG.md## [1.0.0],vcpkg.jsonversion-semver: "1.0.0", andCMakeLists.txtVERSION 1.0.0). The next minor release is thereforev1.1.0. Per the issue brief, the removal target is documented as "the next minor release after v1.1.0" so the deprecation gets at least one full minor release for downstream consumers to migrate before the legacy path is removed.This wording is recorded in three places:
include/container/optimizations/fast_parser.hDoxygen block +#pragma messagetextCHANGELOG.md[Unreleased] > Deprecatedbulletdocs/CHANGELOG.md[Unreleased] > DeprecatedbulletIn-repo legacy use migration
grepswept the entire repo for#include <container/...>/#include "container/..."patterns that are not the canonical<kcenon/container/...>path. The only hit wastests/fast_parser_integration_tests.cpp:21, which is migrated in this PR to<kcenon/container/optimizations/fast_parser.h>. After this PR the in-repo build will not emit the new deprecation warning, and the warning is reserved for external consumers.Testing Done
cmake/g++); relying on CI for build/test verification, same approach used by refactor(container): consolidate headers under include/kcenon/container/ #537 and refactor(container): migrate sources into src/{core,internal,integration,messaging}/ #538.Breaking Changes
None. This is a deprecation-only PR — the legacy header still functions and forwards to the canonical location. Downstream consumers will simply see a new build-time warning until they migrate.
Rollback Plan
Revert this single squash commit. The forwarder reverts to its pre-PR pure
#includeform; the test reverts to the legacy include; the CHANGELOG entries are removed.Out of Scope (sibling sub-issues of EPIC #531)
CMakeLists.txtintocmake/modules — issue [#531-4/5] Decompose CMakeLists.txt into cmake/ modules #535include/container/directory — happens at the planned future minor release, not in this PRgrpc/README.mdcode samples that reference the legacy path — those are docs about deprecated usage and are appropriate to leave until [#531-5/5] Update Doxygen input paths and install rules #536 cleans them up if it touches docsChecklist
include/container/carries a deprecation marker (#pragma messagefor the only existing pure#includeforwarder)CHANGELOG.mdlists deprecated header + replacement + removal target versiondocs/CHANGELOG.mdmirrors the same entry (per the SSOT mirroring note inCHANGELOG.md)Closes #534andPart of #531