Required prerequisites
What version (or hash if on master) of pybind11 are you using?
3.0.1
Problem description
This is a well-structured GitHub issue template you can use. It specifically targets the MSVC 17.12 incompatibility with the iterator debugging macros found in the Kratos core.
GitHub Issue Title:
Compilation failure with MSVC 17.12 (v14.44) and C++20: '_BACKUP_ITERATOR_DEBUG_LEVEL' undeclared
Description
When compiling Kratos Multiphysics, see KratosMultiphysics/Kratos#14105, with the last pybind11 release on Windows using Visual Studio 2022 version 17.12 (MSVC 14.44) with the std:c++20 flag, the build fails in several python binding files due to a macro conflict in the MSVC Standard Library headers.
The error appears to originate from the <span> header in the MSVC STL, which seems unable to resolve the custom _BACKUP_ITERATOR_DEBUG_LEVEL macro used by Kratos to manage iterator debugging states.
Environment
- OS: Windows 10/11
- Compiler: MSVC 14.44.35207 (Visual Studio 2022 17.12)
- C++ Standard: C++20
- Python version: 3.10.11
- Build Type: Release
Error Log
C:\Program Files (x86)\...\include\span(179): error C2065: '_BACKUP_ITERATOR_DEBUG_LEVEL' : undeclared identifier
C:\Program Files (x86)\...\include\span(179): note: the template instantiation context (the oldest) is
C:\Program Files (x86)\...\include\span(31): note: during compilation of class template 'std::_Span_iterator'
C:\Program Files (x86)\...\include\span(179): error C3861: '_BACKUP_ITERATOR_DEBUG_LEVEL': identifier not found
Steps to Reproduce
- Use Visual Studio 2022 updated to version 17.12.
- Configure Kratos with CMake using
-DCMAKE_CXX_STANDARD=20.
- Attempt to build the Kratos Core.
Potential Workaround
Adding in the header of <pybind11/pybind11.h>:
#if defined(_MSC_VER)
#ifndef _BACKUP_ITERATOR_DEBUG_LEVEL
#define _BACKUP_ITERATOR_DEBUG_LEVEL 0
#endif
#endif
Reproducible example code
(Sorry, but it is a full codebase, so I cannot isolate a snippet)
Is this a regression? Put the last known working version here if it is.
Not a regression
Required prerequisites
What version (or hash if on master) of pybind11 are you using?
3.0.1
Problem description
This is a well-structured GitHub issue template you can use. It specifically targets the MSVC 17.12 incompatibility with the iterator debugging macros found in the Kratos core.
GitHub Issue Title:
Compilation failure with MSVC 17.12 (v14.44) and C++20: '_BACKUP_ITERATOR_DEBUG_LEVEL' undeclared
Description
When compiling Kratos Multiphysics, see KratosMultiphysics/Kratos#14105, with the last pybind11 release on Windows using Visual Studio 2022 version 17.12 (MSVC 14.44) with the
std:c++20flag, the build fails in several python binding files due to a macro conflict in the MSVC Standard Library headers.The error appears to originate from the
<span>header in the MSVC STL, which seems unable to resolve the custom_BACKUP_ITERATOR_DEBUG_LEVELmacro used by Kratos to manage iterator debugging states.Environment
Error Log
Steps to Reproduce
-DCMAKE_CXX_STANDARD=20.Potential Workaround
Adding in the header of
<pybind11/pybind11.h>:Reproducible example code
Is this a regression? Put the last known working version here if it is.
Not a regression