On Friday, 4 April 2025 11:15:35 Pacific Daylight Time Thiago Macieira wrote: > BTW, I said we "have the same problem with QMetaType", but in reality we > don't because we take this into account. > friend bool comparesEqual(const QMetaType &lhs, > const QMetaType &rhs) > { > if (lhs.d_ptr == rhs.d_ptr) > return true; > if (!lhs.d_ptr || !rhs.d_ptr) > return false; // one type is undefined, the other is defined > // avoid id call if we already have the id > const int aId = lhs.id(); > const int bId = rhs.id(); > return aId == bId; > }
libstdc++'s type_info has similar code: _GLIBCXX23_CONSTEXPR inline bool type_info::operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT { if (std::__is_constant_evaluated()) return this == &__arg; if (__name == __arg.__name) return true; #if !__GXX_TYPEINFO_EQUALITY_INLINE // ABI requires comparisons to be non-inline. return __equal(__arg); #elif !__GXX_MERGED_TYPEINFO_NAMES // Need to do string comparison. return __name[0] != '*' && __builtin_strcmp (__name, __arg.name()) == 0; #else return false; #endif } I just don't know when it emits that * prefix. I've seen them before, but I don't recall the details of how it works. The GCC source code uses TREE_PUBLIC() but I don't understand how to set it. libc++ does not have that: their std::type_info::operator== only compares the type_name pointer address on non-Windows systems (see the definition of the _LIBCPP_TYPEINFO_COMPARISON_IMPLEMENTATION macro in <typeinfo>). -- Thiago Macieira - thiago.macieira (AT) intel.com Principal Engineer - Intel DCAI Platform & System Engineering
smime.p7s
Description: S/MIME cryptographic signature
-- Development mailing list Development@qt-project.org https://lists.qt-project.org/listinfo/development