[Interest] Can the new Qt 5 (function pointer based) connections ever fail?

Thiago Macieira thiago.macieira at intel.com
Thu Apr 20 17:34:55 CEST 2017


Em quinta-feira, 20 de abril de 2017, às 02:14:24 PDT, Sze Howe Koh escreveu:
> Someone posted the quested at http://stackoverflow.com/
> questions/43487752/when-qt-5-will-fail-the-connect and I'm curious to know
> the answer.
> 
> Since the connections are checked at compile-time, does that mean
> QObject::connect() is guaranteed to succeed at run-time unless a duplicate
> connection is attempted with Qt::UniqueConnection?

No, it's not guaranteed. There's a normal problem and an ABI problem that can 
intervene.

First, remember that you pass the pointer to a signal, but what if the pointer 
you passed is not a signal? In that case, the connection will fail at runtime.

Second, the ABI problem. We've found that PMFs across DLLs/shared libraries 
don't work very well. Many compilers do not implement them properly and allow 
for unintended violations of the One Defintion Rule. What happens is that you 
pass the PMF of a signal, but when the meta object code tries to compare that 
PMF to itself, the comparison fails and so the connection fails.

We have disabled some optimisations that caused these violations and reported 
bugs to compilers that caused them in other situations. All issues I know of 
have been fixed, but that doesn't mean that there aren't more to be found.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Interest mailing list