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

QTypeTraits templates break existing code

    XMLWordPrintable

Details

    • ce83e56cfeb2806181ec1daade9690f4c90b901c (qt/qtbase/dev) 687685f64928ed69b2161f9f2ff4f303bec04967 (qt/qtbase/6.0) 0a9711d668f7ad7b156fa4e78afb54a97243b7ef (qt/qtbase/6.1)

    Description

      It seems that Qt6 doesn't allow the type 'S' to act as a container for items of the type 'S'.

      The following code fails to compile with Qt6 (but compiles with Qt5): 

      struct S {
        using value_type = S; // causes compile error with Qt6
        int begin();
        int end();
      };
      
      Q_DECLARE_METATYPE(S)
      

      Here are some compiler errors:

      'value': is not a member of 'QTypeTraits::detail::expand_operator_equal_container<T,true>'
      
      'value': is not a member of 'QTypeTraits::detail::expand_operator_equal_container<S::value_type,true>'

      Similar messages about 'expand_operator_less_than_container' template are printed.

      "Recursive" containers are sometimes useful. An example is nlohmann::json. However, changes introduced by Qt6 break applications that use such a types with the Qt property system (see also the issue description here)

      Attachments

        Issue Links

          For Gerrit Dashboard: QTBUG-89456
          # Subject Branch Project Status CR V

          Activity

            People

              fabiankosmale Fabian Kosmale
              karzhenkov Alexander Karzhenkov
              Maurice Kalinowski Maurice Kalinowski
              Alex Blasche Alex Blasche
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes