> On 19 Jul 2022, at 18:08, Thiago Macieira <thiago.macie...@intel.com> wrote: > >> Lastly, an aside: Q_DECLARE_METATYPE being effectively unnecessary was the >> goal for Qt 6, but is not the case yet. I consider that a bug that should >> finally be fixed in 6.5. > > Right. There should be exactly one use for Q_DECLARE_METATYPE: when the name > you want to register is not the name that the C++ language recognises for > your > type, and this should only be done for legacy reasons. > > typedef QMap<int, int> IntMap; > Q_DECLARE_METATYPE(IntMap); > > And you may have the string "IntMap" somewhere in your meta objects.
Interestingly, qDe0bug() << QMetaType::fromType<std::string>().name(); qDebug() << QMetaType::fromName("std::string"); prints, with Apple clang: std::__1::basic_string<char> QMetaType() but with msvc 22: std::basic_string<char,std::char_traits<char>,std::allocator<char>> QMetaType() and then "std::string" in your meta object won’t work either, I suppose? But interestingly, neither does Q_DECLARE_METATYPE(std::string). With qRegisterMetaType<std::string>(“std::string”); I get std::__1::basic_string<char> QMetaType(std::__1::basic_string<char>) with clang and td::basic_string<char,std::char_traits<char>,std::allocator<char>> QMetaType(std::basic_string<char,std::char_traits<char>,std::allocator<char>>) with msvc 22. What does that mean if e.g. "std::string" is present in a meta object? > Any opinion on what must happen together or not at all? I agree with Fabian, it seems uncontroversial to treat T& and T as different types in the QMetaType system. Code that relies on them being the same needs to be fixed anyway. Doing that doesn’t seem to prevent anything else discussed. Volker _______________________________________________ Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development