Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-137452

compile error in moc-generated code if slot/property name equals return type name

    XMLWordPrintable

Details

    • Windows
    • 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

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              fabiankosmale Fabian Kosmale
              jbornema Joerg Bornemann
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There is 1 open Gerrit change