我正在使用 VS2022 Community 构建一个软件,该软件在其
C++23
中标记为使用 /std:c++latest
或 CMakeLists.txt
。
软件构建良好,但 VS 中的“错误列表”窗格显示文件中的两个特殊编译错误
<ranges>
。如果我手动在 C++20
而不是 C++23
中构建软件,这些错误就会消失。以下是“错误列表”窗格中的错误以及导致这些错误的代码:
由于第 43 行上的 #if
子句,如果我使用 C++20
进行构建,则不会出现这些错误。
再次强调,该软件构建得很好。输出窗格中没有错误。它也工作得很好。我面临的问题是由于这些特殊的错误,我无法使用 HotReload 更新正在运行的代码,因为它认为代码无法编译(因为存在错误)。如果我在调试器遇到断点后尝试更改代码并恢复执行,则会收到此消息。单击任何按钮都会提示我终止 VS 中的程序。
如何解决这个问题?
显而易见的答案是将编译器降级到 C++20,但我只是为了自己的目的而构建这个软件。我不维护代码,而且我没有这样做的特权。
有没有办法在不降级编译器的情况下消除
<ranges>
中的这些错误,以便我可以使用 HotReload?
在人们问之前,我不知道如何在这里发布整个项目。因此,为了能够重现,请打开一个控制台应用程序项目,使其使用 C++23 进行编译,并且不要忘记
#include <ranges>
并亲自查看错误。如果我能找到方法,我可以发布一个最小的可重现示例。
MSVC 使用与编译代码不同的编译器进行 Intellisense。
它通常支持不同的功能。您可以通过执行
#ifdef __INTELLISENSE__
进行一些修改,并在 Intellisense 路径中拥有不同的预处理器标记。
比如
#ifdef __INTELLISENSE__
#undef _HAS_CXX23
#endif
那么唯一产生错误的地方将是使用 C++23 功能的代码。您可以单独守护它们。