[Development] QStringLiteral is broken(ish) on MSVC (compiler bug?)

Thiago Macieira thiago.macieira at intel.com
Thu Mar 14 22:48:30 CET 2019

On Thursday, 14 March 2019 13:54:29 PDT NIkolai Marchenko wrote:
> I've posted about this issue (I think) on slack a bit earlier, see
> https://cpplang.slack.com/archives/C29936TQC/p1549899016010000

For those who can't read it, the suggestion was to use the /utf-8 option to 
the compiler (with qmake, CONFIG += utf8_source). But a quick set of testing 
does not show correct results. For 

  char16_t text1[] = u"" "\u0102";

It produces, without /utf-8 (see https://msvc.godbolt.org/z/EvtKzq):

?text1@@3PA_SA DB '?', 00H, 00H, 00H                    ; text1

And with /utf-8:

?text1@@3PA_SA DB 0c4H, 00H, 01aH, ' ', 00H, 00H        ; text1

Those two values make no sense. U+0102 is neither 0x003f (question mark) nor 
0x00c4 0x201a ("Ä‚"). This is a clear compiler bug. An interpretation of the 
C++11 standard could say that the translation is correct for the no-/utf-8 
build, but with /utf-8 or /execution-charset:utf-8 it should have produced the 
correct result.

C++11 2.14.5 [lex.string]/13 (now 5.13.5/12 [1]) says:

"If one string-literal has no encoding-prefix, it is treated as a string-
literal of the same encoding-prefix as the other operand."

In table 9:
	u"a" "b"	is the same as	u"ab"

[1] http://eel.is/c++draft/lex.string#12
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products

More information about the Development mailing list