[Development] HEADS-UP: QStringLiteral
Mutz, Marc
marc at kdab.com
Fri Aug 23 08:35:49 CEST 2019
On 2019-08-22 21:09, Danila Malyutin wrote:
> Can't it be alleviated/improved by providing user-defined literal for
> QString(Literal)? So that one would only write a["b"_qs] = "c"_qs.
Yes.
++ways_to_construct<QString>;
:)
Fun aside, in C++20, this may actually alleviate some of the problems of
QStringLiteral: if we use UDLs instead of lambdas, at least we make
QStringLiteral data sharable with each other, because instead of a
lambda function (which has a different, new type each time you type it),
you'd instantiate a function template:
"foo"_qs -> operator ""_qs<"foo">();
And the linker would sort out duplicates.
But up to and incl. C++17, the only way to make "foo"_qs work is by
operator ""_qs(const char *, std::size_t), which is not a template, so
all it can do is call QString::fromUtf8(), which would be a step back
from what we have right now (since 5.7 or so, we guarantee that
QStringLiteral doesn't allocate).
@Ville: please correct me if I'm wrong in the above. And: what's the
reason I can't use the template <char...> version for string-literal
UDLs?
Thanks,
Marc
More information about the Development
mailing list