[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
5.9.0?
Issue 1 (12:19 GMT):
https://testresults.qt.io/coin/integration/qt/qtbase/tasks/1497525737
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):
https://testresults.qt.io/coin/integration/qt/qtbase/tasks/1497552138
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):
https://testresults.qt.io/coin/integration/qt/qtbase/tasks/1497560567
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
https://codereview.qt-project.org/151324:
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