> On 19 Jul 2022, at 18:08, Thiago Macieira <[email protected]> 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
[email protected]
https://lists.qt-project.org/listinfo/development