On Tuesday 20 October 2015 00:51:58 Olivier Goffart wrote:
> On Monday 19. October 2015 23:26:45 Marc Mutz wrote:
> > This particular mistake is easy to prevent statically, though:
> > 
> >    QStringView(QString &&) = delete;
> 
> No.
> 
> We want this to work:
> 
>  if (isValidIdentifier(myVariant.toString()))
> 
> with isValidIdentifier taking a QStringView and toString returning a 
> temporary.

That can be mitigated by overloading isValidIdentifier with a QString &&. That 
is:

        bool isValidIdentifier(QString &&id);
        bool isValidIdentifier(const QStringView &id);

The first one can delegate to the second, as inside it the id parameter is 
lvalue, not rvalue. That is:

        bool isValidIdentifier(QString &&id) 
        { return isValidIdentifier(QStringView(id)); }

Note that this overload is not necessary for existing APIs where a const 
QString& overload is already present, as that will bind to the rvalue just 
fine.

So is there any case where we'd want a QString&& overload instead of a const 
QString &?

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

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to