Details
-
Bug
-
Resolution: Fixed
-
P2: Important
-
6.9.1
-
None
-
VS 2022
-
-
dea21545b (dev), c22297372 (6.10)
Description
This bug report is the result of investigating QTBUG-136512. ActiveQt's dumpcpp creates code like this:
#pragma once #include <QtCore/qobject.h> namespace MyNS { class MyObject : public QObject { Q_OBJECT Q_PROPERTY(FocusPolicy FocusPolicy READ FocusPolicy WRITE SetFocusPolicy) public: MyObject(QObject *parent = nullptr) : QObject(parent) { } enum FocusPolicy { NoFocus = 0, HocusFocus = 1 }; Q_ENUM(FocusPolicy) public slots: void SetFocusPolicy(FocusPolicy) { } FocusPolicy FocusPolicy() { return NoFocus; } }; } // namespace MyNS
and the MSVC compiler barfs at moc's generated C++ file.
D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(51): error C3867: 'MyNS::MyObject::FocusPolicy': non-standard syntax; use '&' to create a pointer to member D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(51): error C2974: 'QtMocHelpers::SlotData': invalid template argument for 'F', type expected D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(462): note: see declaration of 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(51): error C2641: cannot deduce template arguments for 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(51): error C2780: 'QtMocHelpers::SlotData<F> QtMocHelpers::SlotData(QtMocHelpers::SlotData<F>)': expects 1 arguments - 5 provided D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(462): note: see declaration of 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(55): error C2352: 'MyNS::MyObject::FocusPolicy': a call of a non-static member function requires an object D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW\../../../../myobject.h(25): note: see declaration of 'MyNS::MyObject::FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(55): error C2974: 'QtMocHelpers::SlotData': invalid template argument for 'F', type expected D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(462): note: see declaration of 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(55): error C2641: cannot deduce template arguments for 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(55): error C2780: 'QtMocHelpers::SlotData<F> QtMocHelpers::SlotData(QtMocHelpers::SlotData<F>)': expects 1 arguments - 4 provided D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(462): note: see declaration of 'QtMocHelpers::SlotData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(59): error C2923: 'QtMocHelpers::PropertyData': 'MyNS::MyObject::FocusPolicy' is not a valid template type argument for parameter 'PropertyType' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(59): note: see declaration of 'MyNS::MyObject::FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(59): error C2641: cannot deduce template arguments for 'QtMocHelpers::PropertyData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(59): error C2783: 'QtMocHelpers::PropertyData<PropertyType> QtMocHelpers::PropertyData(uint,uint,uint,uint,uint)': could not deduce template argument for 'PropertyType' D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(293): note: see declaration of 'QtMocHelpers::PropertyData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(59): error C2780: 'QtMocHelpers::PropertyData<PropertyType> QtMocHelpers::PropertyData(QtMocHelpers::PropertyData<PropertyType>)': expects 1 arguments - 3 provided D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(291): note: see declaration of 'QtMocHelpers::PropertyData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): error C2923: 'QtMocHelpers::EnumData': 'MyNS::MyObject::FocusPolicy' is not a valid template type argument for parameter 'Enum' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): note: see declaration of 'MyNS::MyObject::FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): error C2976: 'QtMocHelpers::EnumData': too few template arguments D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(309): note: see declaration of 'QtMocHelpers::EnumData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): error C2641: cannot deduce template arguments for 'QtMocHelpers::EnumData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): error C2783: 'QtMocHelpers::EnumData<Enum,N> QtMocHelpers::EnumData(uint,uint,uint)': could not deduce template argument for 'Enum' D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(321): note: see declaration of 'QtMocHelpers::EnumData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(63): error C2780: 'QtMocHelpers::EnumData<Enum,N> QtMocHelpers::EnumData(QtMocHelpers::EnumData<Enum,N>)': expects 1 arguments - 3 provided D:/dev/qt/dev/qtbase/src/corelib/kernel/qtmochelpers.h(309): note: see declaration of 'QtMocHelpers::EnumData' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(86): error C2923: 'std::add_pointer_t': 'MyNS::MyObject::FocusPolicy' is not a valid template type argument for parameter '_Ty' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(86): note: see declaration of 'MyNS::MyObject::FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(86): error C2100: you cannot dereference an operand of type 'void' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(87): error C2146: syntax error: missing ';' before identifier '_r' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(87): error C3867: 'MyNS::MyObject::FocusPolicy': non-standard syntax; use '&' to create a pointer to member D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(87): error C2065: '_r': undeclared identifier D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(88): error C2061: syntax error: identifier 'FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(95): error C2061: syntax error: identifier 'FocusPolicy' D:\dev\personal\mocnsissue\build\debug\mocnsissue_autogen\EWIEGA46WW/moc_myobject.cpp(102): error C2061: syntax error: identifier 'FocusPolicy'
This can be fixed manually in the moc_XXX.cpp file by prepending the namespace to the typename where needed.
Attachments
Issue Links
- is required for
-
QTBUG-136512 [Reg 6.8.3 -> 6.9.0] dumpcpp's output is uncompilable due to missing namespaces
-
- Closed
-
-
QTBUG-137347 dumpcpp skips namespace and creates syntaxes errors
-
- Closed
-
For Gerrit Dashboard: QTBUG-137452 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
653513,1 | moc: handle enum / member name conflict | 6.9 | qt/qtbase | Status: NEW | +2 | +1 |