Leslie <laszlo.nemeth....@gmail.com> added the comment:

Some history and explanation of this problem:

- Qt extends C++ with the following keywords:
  "slots", "signals", "emit"
- This extension is compiled with a Meta-Object-Compiler (MOC) into standard 
C++.
- Since code using Qt extensions (i.e. headers) generally used "mixed" with 
standard C++ code, "standard" compiler must be able to compile the Qt specific 
part, too
  -> the extension keywords are declared as empty macros (i.e. #define slots)

The consequence is that if Qt-based headers are used together with any 3rd 
party headers, the 3rd party code cannot contain the extension keywords (slots, 
signals, emit) as C/C++ tokens, because the preprocessor will "delete" them as 
a result of macro expansion, since the keywords are defined as empty macros.
->
The code won't compile because of syntax errors.

This caused bug https://bugs.python.org/issue1086854 , which was fixed in 
https://github.com/python/cpython/commit/c255c7bef7621596869f56d887ac3ccd5b536708

The fix renamed the "slots" struct member in Python, thus the conflict was 
resolved.

Note: the Qt library is, like Python, old, and used in a huge number of 
projects and products. E.g. Qt is the base platform for KDE development. It's a 
matter of point of view, which of the two, Qt or Python should be "fixed".

In my PR I used the same solution: renaming the conflicting member.
-------------

Since this time this solution was not welcome, and obviously I'm not the first 
facing this issue, I was searching for another solutions.

I found that Qt has already provided a solution for this problem.

There are 2 macros: QT_NO_SIGNALS_SLOTS_KEYWORDS and QT_NO_KEYWORDS , which 
"turn off" defining the extension keywords as macros.
Instead the QT_SLOTS, Q_SIGNALS macros should be used, which very likely do not 
interfere with any 3rd party library...

Though, these are "official" Qt macros, not very well documented: 
https://bugreports.qt.io/browse/QTBUG-70564  :)

So by defining QT_NO_KEYWORDS I could resolve this whole issue.

Thanks guys for your patience and attetion!
:)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue38007>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to