Repository navigation
Description
This issue has multiple aspects. I will gather them here since they are semantically connected.
The problem
Brittle boost::wave::need_cppXX(..) usage
The need_cppXX() functions return true for exactly the chosen language version. Consequently, all places wanting a branch being active for version XX and following have to do need_cppXX() || need_cppYY() || need_cppZZ() || ... Besides being suboptimal code code readability, it is also easy to forget extending one of those constructs when adding a language version.
In my recent contributions I found such an existing bug by chance.
Managing the C++ language version in 2 ways with the programmatic API and the BOOST_WAVE_SUPPORT_CPPXX macros
Code readability and maintaining suffer in my opinion due to those constructs all over the plase:
#if BOOST_WAVE_SUPPORT_CPPXX != 0
// Do something requiring at least version XX
#endif
#if BOOST_WAVE_SUPPORT_CPPYY != 0
// Do something requiring at least version YY
#endifProposal
Better express desired logic for "active starting from C++ version XX"
Introduce functions boost::wave::need_at_least_cppXX(..):
- Those are always true given the user chooses a language version >= XX. Those would allow replacing all the or chaining cases with a single expressive function.
- Maybe we can even remove the
need_cppXXfunctions. I can't think of a proper use case for them. This is optional. If there are use cases I do not see right now, they can also stay.
include/boost/wave/language_support.hpp always supports all C++ versions independent of BOOST_WAVE_SUPPORT_CPPXX macros
The only reason for the BOOST_WAVE_SUPPORT_CPPXX I can think of is performance optimization. This does in my opinion not really matter for what happens in include/boost/wave/language_support.hpp.
Having the enum and selection/check functions for all C++ versions and features always available is the precondition for at some point writing code no longer using the BOOST_WAVE_SUPPORT_CPPXX macros pattern.
This part of the proposal can be rejected and we can still implement need_at_least_cppXX(..). But we should decide first, as both parts of the proposal touch include/boost/wave/language_support.hpp.
Activity
jefftrull commentedon Oct 30, 2026
I'll look at this soon but in the meantime please LMK if this means we have a bug in the soon-to-be-released Boost 1.93. Thanks.
martis42 commentedon Oct 31, 2026
@jefftrull Sorry I formulated this poorly. The statement
In my recent contributions I found such an existing bug by chance.referenced the already merged fix done as part of #276.Potentially the same issue exists somewhere else - it is an error one can easily make - but I a not aware of any concrete case.
TL;DR: This is a proposal to increase code maintainability and make bugs less likely, not a report of a concretely identified bug being present right now.
jefftrull commentedon Nov 1, 2026
I would be happy to see a PR for DWYU applied to the Wave codebase :)
martis42 commentedon Nov 6, 2026
DWYU is quite focused on the Bazel build system. Unless you want to natively support a Bazel build with boost.wave I fear you can't profit from it 😅
jefftrull commentedon Nov 9, 2026
You don't want to use "bjam"? 😆