fix: define _BACKUP_ITERATOR_DEBUG_LEVEL for MSVC 17.12+ compatibility #5957
+9
−0
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.
Description
This PR fixes a compilation error encountered when using Visual Studio 2022 version 17.12 (MSVC 14.44) in C++20 mode.
The MSVC STL (specifically the
<spanheader) has introduced internal checks that reference the macro_BACKUP_ITERATOR_DEBUG_LEVEL. In certain build environments—particularly those involving complex Python bindings like Kratos Multiphysics—this macro is expected by the STL but remains undeclared, leading to the following error:Proposed Changes
Inserted a preprocessor guard in
include/pybind11/pybind11.hto ensure_BACKUP_ITERATOR_DEBUG_LEVELis defined to0if it is not already set. This allows the MSVC STL headers to resolve their internal iterator debugging logic correctly. I understand that maybe the placement can be improved in order to not add "garbage" to the main include file, I am open to suggestions.Motivation and Context
<spanthrough or alongsidepybind11.How Has This Been Tested?
Suggested changelog entry: