Details
-
Bug
-
Resolution: Fixed
-
P1: Critical
-
6.6.0
-
None
-
VC++2019
-
-
31f874520 (dev), c289ed4f9 (6.6)
Description
When I compiled a qtquick program with Qt 6.6.0 + VS2019, I got these errors
D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(23): warning C4003: not enough arguments for function-like macro invocation 'min' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(24): warning C4003: not enough arguments for function-like macro invocation 'max' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(35): warning C4003: not enough arguments for function-like macro invocation 'max' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): warning C4003: not enough arguments for function-like macro invocation 'min' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): warning C4003: not enough arguments for function-like macro invocation 'max' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(23): error C2589: '(': illegal token on right side of '::' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(23): error C2062: type 'unknown-type' unexpected D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(24): error C2589: '(': illegal token on right side of '::' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(24): error C2059: syntax error: ')' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(24): error C2143: syntax error: missing ';' before '{' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(19): error C3615: constexpr function 'QJSNumberCoercion::isInteger' cannot result in a constant expression D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(29): note: failure was caused by control reaching the end of a constexpr function D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(35): error C2589: '(': illegal token on right side of '::' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(35): error C2062: type 'unknown-type' unexpected D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(35): error C2059: syntax error: ')' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(35): error C2143: syntax error: missing ';' before '{' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(33): error C3615: constexpr function 'QJSNumberCoercion::isArrayIndex' cannot result in a constant expression D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(40): note: failure was caused by control reaching the end of a constexpr function D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): error C2589: '(': illegal token on right side of '::' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): error C2062: type 'unknown-type' unexpected D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): error C2589: '(': illegal token on right side of '::' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): error C2059: syntax error: ')' D:\Qt\6.6.0\msvc2019_64\include\QtQml/qjsnumbercoercion.h(47): error C2143: syntax error: missing ';' before '{'
I have to change all
std::numeric_limits<int>::min() std::numeric_limits<int>::max()
into
(std::numeric_limits<int>::min)() (std::numeric_limits<int>::max)()
in qjsnumbercoercion.h to compile successfully.
This problem only occurs when using the VC++ compiler, not with gcc. It looks like the compiler is confusing the methods in std::numeric_limits<int> with the macros defined by VC++.
Attachments
For Gerrit Dashboard: QTBUG-118132 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
511884,1 | qjsnumbercoercion: Guard against MSVC min/max macro | dev | qt/qtdeclarative | Status: ABANDONED | 0 | 0 |
511885,4 | Qml: Prevent MSVC 2019 min()/max() macros from triggering | dev | qt/qtdeclarative | Status: MERGED | +2 | 0 |
512025,2 | Qml: Prevent MSVC 2019 min()/max() macros from triggering | 6.6 | qt/qtdeclarative | Status: MERGED | +2 | 0 |