[Development] Challenge: adding new method overloads when existing consumers use {} with args

Giuseppe D'Angelo giuseppe.dangelo at kdab.com
Sat Jul 30 13:10:55 CEST 2022

On 28/07/2022 22:54, Thiago Macieira wrote:
> This case can be considered a Category B source incompatible change as per
> https://quips-qt-io.herokuapp.com/quip-0006.html, because it clearly
> introduces ambiguity.
> But {} is particularly special, so I don't know how we'd deal with it. I don't
> think this has come up for us yet. For one, the mailing list thread linked in
> the QUIP didn't address it.

Generally speaking, we try to avoid overloading when possible (but use 
differently named functions), although there are situations in which we 
just don't/can't (e.g. constructors):

  QQmlContext *ctx = new QQmlContext({}); // ERROR, ambiguous

Ultimately, I think that we simply don't "really" deal with this 
particular problem, and may accept the SIC. For instance, if we add a 
QStringView overload to a function taking QString, this is a SIC but I 
don't think we would reject the addition. I certainly don't think we 
should do super-clever stuff. (E.g.: QLabel has these two constructors:

> QLabel(const QString &text, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()) > QLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())


>  QLabel *label = new QLabel({}); // compiles!

"Unicorn" initialization.)

... having said that, I can also see scenarios where we would in fact 
reject the addition if it creates a "gratuitous" SIC. For instance right 
now there's a

> QPoint &operator+=(QPoint)

Someone proposed to add

> QPoint &operator+=(QSize)

But that would make p += {deltax, deltay} ambiguous, for very little reason.

My 2 c,
Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com
KDAB - The Qt, C++ and OpenGL Experts
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4244 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.qt-project.org/pipermail/development/attachments/20220730/799e736c/attachment.bin>

More information about the Development mailing list