Summary: | dev-qt/qtgui-4.8.7 with gcc-6: error: invalid conversion from ‘int’ to ‘QFlags<QItemSelectionModel::SelectionFlag>::Zero | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | Mark Wright <gienah> |
Component: | Current packages | Assignee: | Qt Bug Alias <qt> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | alex.iris.parker, anthonyryan1, carlphilippreh, fturco, matthew |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 582084 | ||
Attachments: | qtgui-4.8.7-gcc-6.0.patch |
I looked into this bug some myself, and I think this whole block of code is incorrect as it doesn't make sense. Anding these two flags together will give a value of 0, causing the function to do nothing, instead of the intended unselecting the column. However, the behvaiour has been this way since the code was introduced, so changing it might break other code which I can understand the Gentoo devs not wanting to risk on such an old library. Looking at the best Qt5 equivalent version, the Qt devs do use an or operation as one would expect here. So it does seem to be a bug, not a feature. The change was done here: https://codereview.qt-project.org/#/c/42715/ . The patch as attached should work otherwise. If you want this patch instead, would it help to submit a PR on Github with it with a revbump? |
Created attachment 434858 [details, diff] qtgui-4.8.7-gcc-6.0.patch Compiling with gcc 6.1.0 fails with this error: /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp: In member function ‘virtual bool QAccessibleTable2::unselectColumn(int)’: /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:105: error: conversion from ‘int’ to ‘QItemSelectionModel::SelectionFlags {aka QFlags<QItemSelectionModel::SelectionFlag>}’ is ambiguous view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect); ^ In file included from ../../../../include/QtCore/qglobal.h:1:0, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qnamespace.h:45, from ../../../../include/QtCore/qnamespace.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobjectdefs.h:45, from ../../../../include/QtCore/qobjectdefs.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobject.h:47, from ../../../../include/QtCore/qobject.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qpointer.h:45, from ../../../../include/QtCore/qpointer.h:1, from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.h:45, from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:42: ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2436:29: note: candidate: constexpr QFlags<Enum>::QFlags(QFlags<Enum>::Zero) [with Enum = QItemSelectionModel::SelectionFlag; QFlags<Enum>::Zero = void**] <near match> Q_DECL_CONSTEXPR inline QFlags(Zero = 0) : i(0) {} ^~~~~~ ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2436:29: note: conversion of argument 1 would be ill-formed: /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:74: error: invalid conversion from ‘int’ to ‘QFlags<QItemSelectionModel::SelectionFlag>::Zero {aka void**}’ [-fpermissive] view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from ../../../../include/QtCore/qglobal.h:1:0, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qnamespace.h:45, from ../../../../include/QtCore/qnamespace.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobjectdefs.h:45, from ../../../../include/QtCore/qobjectdefs.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qobject.h:47, from ../../../../include/QtCore/qobject.h:1, from ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/kernel/qpointer.h:45, from ../../../../include/QtCore/qpointer.h:1, from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.h:45, from /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:42: ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2435:29: note: candidate: constexpr QFlags<Enum>::QFlags(Enum) [with Enum = QItemSelectionModel::SelectionFlag] <near match> Q_DECL_CONSTEXPR inline QFlags(Enum f) : i(f) {} ^~~~~~ ../../../../include/QtCore/../../../qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h:2435:29: note: conversion of argument 1 would be ill-formed: /var/tmp/portage/dev-qt/qtgui-4.8.7/work/qt-everywhere-opensource-src-4.8.7/src/plugins/accessible/widgets/itemviews.cpp:396:74: error: invalid conversion from ‘int’ to ‘QItemSelectionModel::SelectionFlag’ [-fpermissive] view()->selectionModel()->select(index, QItemSelectionModel::Columns & QItemSelectionModel::Deselect); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~