-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Description
Required prerequisites
- Make sure you've read the documentation. Your issue may be addressed there.
- Search the issue tracker and Discussions to verify that this hasn't already been reported. +1 or comment there if it has.
- Consider asking first in the Gitter chat room or in a Discussion.
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
#endifReproducible 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