[Development] Is qsizetype *documented* to be ptrdiff_t?

Thiago Macieira thiago.macieira at intel.com
Thu Sep 3 07:06:39 CEST 2020


On Wednesday, 2 September 2020 21:37:23 PDT Giuseppe D'Angelo via Development 
wrote:
> On 03/09/2020 06:08, Thiago Macieira wrote:
> > Because qsizetype is the same type as qint64, which is the same type as
> > qlonglong (which exists for historical reasons, because older VC++ didn't
> > support "long long").
> 
> I'm very sorry, I'm lost now -- are you using as a postulate "on 64 bit
> systems"? I would've expected qsizetype to be 32 bits (on 32 bit systems)...

Yes, the issue only happens on 64-bit Unix systems.

On 64-bit Windows and on all 32-bit systems, qsizetype and ptrdiff_t types 
match.

> But while qint64 should not change / still be the same type of
> qlonglong, why qsizetype has to be the same type qint64 and cannot be a
> different type (say, ptrdiff_t)?

  qsizetype x = QRandomGenerator::system()->bounded(list.size());

See https://bugreports.qt.io/browse/QTBUG-86318

If we use all three types in Qt (int, long and long long), then we need all 
three in all the overload sets. Today we have int/qlonglong or qint32 / qint64 
overload sets, with a few exceptions also adding long.

> >    qint64 v = QRandomGenerator::system()->bounded(str.toLongLong());
> > 
> > Does this compile or not?
> 
> Devil's advocate: next to "toLongLong", why there isn't also "toInt64"?

Because there's no toInt32 and toInt16 either. They can be added, or better 
yet we can use templates (toInteger<quint32>), but this API doesn't exist yet.

> Or why does bounded() take int64, not long long? Do we have a policy on
> which one to use where? This smells like we're making the situation
> worse by increasing the mix&matching types in the APIs rather than
> streamlining.

Because most people want to add two functions to their overload sets: int / 
qlonglong or qint32 / qint64. By matching size_t / ptrdiff_t, we'll need to 
expand all those overload sets to three.

Note: bounded() currently does not take any 64-bit type at all; only 32-bit. 
See task above to add the 64-bit ones.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel DPG Cloud Engineering





More information about the Development mailing list