我升级到最新版本的 VisualStudio 2017 (15.9.5) 来编译我们的原生 C++ 应用程序。但是现在在发布模式下(并且仅在发布中)我收到以下警告(我们将警告视为错误):
...nothing useful...
6>qrc_IceApplication.cpp
6> Creating library C:/tkbt/Prose/Build/Release/lib/Prose.lib and object C:/tkbt/Prose/Build/Release/lib/Prose.exp
6>Generating code
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): error C2220: warning treated as error - no 'executable' file generated
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): warning C4789: buffer '_Temp' of size 64 bytes will be overrun; 72 bytes will be written starting at offset 8
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): warning C4789: buffer '_Temp' of size 64 bytes will be overrun; 72 bytes will be written starting at offset 8
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): warning C4789: buffer '_Temp' of size 64 bytes will be overrun; 72 bytes will be written starting at offset 8
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): warning C4789: buffer 'DetectPossibilities' of size 64 bytes will be overrun; 72 bytes will be written starting at offset 8
6>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\functional(1195): warning C4789: buffer '_Temp' of size 64 bytes will be overrun; 72 bytes will be written starting at offset 8
DetectPossibilities 是唯一与我们的代码有任何关系的东西(_Temp 没有),我能看到的唯一奇怪的是它是自我捕获的
std::function<bool(int)> DetectPossibilities;
DetectPossibilities = [&](int startPos) -> bool {
... lots of code
bool nestedAnyFound = DetectPossibilities(startPos + ofMatch.capturedLength());
... lots of code
};
更新:我找到了一种解决方法和一个合理的解释,所以我将发布 Q 和 A,这样下一个人就不会花费与我相同的半天时间来弄清楚发生了什么。