Skip to content

"template with C linkage" error when including "pycore_interp.h" from C++ file#122584

@sklam

Description

@sklam

Bug report

Bug description:

Tested on official docker image python3.13.0b4-bullseye. pycore_interp.h causes compiler error when included from C++ file. No problem when included from C file.

mypackage/_good.c:

#include"Python.h"#definePy_BUILD_CORE 1 #include"internal/pycore_interp.h"

mypackage/_bad.cpp (same content as above):

#include"Python.h" #definePy_BUILD_CORE1 #include"internal/pycore_interp.h"

setup.py:

fromsetuptoolsimportExtension, find_packages, setupdefget_ext_modules(): ext_good=Extension(name="mypackage.a", sources=['mypackage/_good.c']) ext_bad=Extension(name="mypackage.b", sources=['mypackage/_bad.cpp']) return [ext_good, ext_bad] metadata=dict( name='debugthis', packages=find_packages(include=["mypackage"]) ) metadata['ext_modules'] =get_ext_modules() setup(**metadata)

Running python setup.py build produces error:

running build running build_py copying mypackage/__init__.py -> build/lib.linux-x86_64-cpython-313/mypackage running build_ext building 'mypackage.a' extension creating build/temp.linux-x86_64-cpython-313 creating build/temp.linux-x86_64-cpython-313/mypackage gcc -pthread -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -I/usr/local/include/python3.13 -c mypackage/_good.c -o build/temp.linux-x86_64-cpython-313/mypackage/_good.o gcc -pthread -shared build/temp.linux-x86_64-cpython-313/mypackage/_good.o -L/usr/local/lib -o build/lib.linux-x86_64-cpython-313/mypackage/a.cpython-313-x86_64-linux-gnu.so building 'mypackage.b' extension gcc -pthread -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -fPIC -I/usr/local/include/python3.13 -c mypackage/_bad.cpp -o build/temp.linux-x86_64-cpython-313/mypackage/_bad.o In file included from /usr/local/include/python3.13/internal/mimalloc/mimalloc.h:429, from /usr/local/include/python3.13/internal/pycore_mimalloc.h:39, from /usr/local/include/python3.13/internal/pycore_interp.h:31, from mypackage/_bad.cpp:4: /usr/include/c++/10/type_traits:56:3: error: template with C linkage 56 | template<typename _Tp, _Tp __v> | ^~~~~~~~ In file included from mypackage/_bad.cpp:4: /usr/local/include/python3.13/internal/pycore_interp.h:4:1: note: ‘extern "C"’ linkage started here 4 | extern "C"{| ^~~~~~~~~~ ... 

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

Labels

type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions