[Development] Let's please drop MSVC 2013 for 5.10

Thiago Macieira thiago.macieira at intel.com
Fri Jun 16 01:07:03 CEST 2017

We have not one, not two, but THREE integration failures TODAY alone caused by 
that compiler failing to meet what we've come to expect from C++11. This is 
going to happen again and again.

So I'm pleading again: can we drop it? What are the download numbers for 

Issue 1 (12:19 GMT):

FAIL!  : tst_QRandomGenerator::stdGenerateCanonical(default) '[] { 
QRandomGenerator rd; qreal value = std::generate_canonical<qreal COMMA 
32>(rd); return value > 0 && value < 1 && value != RandomValueFP; }()' 
returned FALSE. (1st try)

Turns out that std::generate_canonical with MSVC 2013's Standard Library NEVER 
generates a correct value. The function is specified to return a number in the 
range [0,1), but the implementation always returns a number >= 1.

Issue 2 (19:47 GMT):

 FAIL!  : tst_QLocale::formattedDataSize(Russian-IEC-0) Compared values are 
not the same
    Actual   (QLocale(language).formattedDataSize(bytes, decimalPlaces, 
units)): "0 \u0431\u0430\u0439\u0442\u044B"
    Expected (output)                                : "0 ?????"

The source code had "0 \u0431...", but with MSVC 2013 (and 2015 until Update 
2), the Unicode codepoint U+0431 is attempted to be converted to the execution 
character set. Without the /utf-8 option added in MSVC 2015 Update 2, the 
conversion fails and the compiler prints:

warning C4566: character represented by universal-character-name '\u0431' 
cannot be represented in the current code page (1252)

[ok, not a C++11 issue per se, but we still want to use Unicode source code]

Issue 3 (21:18 GMT):

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xutility(371) : 
error C2825: '_Iter': must be a class or namespace when followed by '::'
        text\qfontsubset.cpp(200) : see reference to class template 
instantiation 'std::iterator_traits<int>' being compiled

Source:     QVector<int> reverseMap(0x10000, 0);

Both elements are int, so they seem to match the constructor being added in 

template <typename InputIterator, QtPrivate::IfIsInputIterator<InputIterator> 
= true>
QVector(InputIterator f, InputIterator l);

But it shouldn't because of that SFINAE exclusion. The compiler failed 
(expression SFINAE?).

I know the first two can be worked around:
 1) QSKIP MSVC 2013
 2) rewrite with UTF-8 byte escape sequences ("\xd0\xb1")

But I repeat: these problems are going to turn up again and again.
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

More information about the Development mailing list