使用 /std:c++latest 时,Intellisense 显示标准库中的错误,但项目编译正常

问题描述 投票:0回答:1

我正在使用 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>
并亲自查看错误。如果我能找到方法,我可以发布一个最小的可重现示例。

c++ visual-studio visual-c++ intellisense c++23
1个回答
0
投票

MSVC 使用与编译代码不同的编译器进行 Intellisense。

它通常支持不同的功能。您可以通过执行

#ifdef __INTELLISENSE__
进行一些修改,并在 Intellisense 路径中拥有不同的预处理器标记。

比如

#ifdef __INTELLISENSE__
#undef _HAS_CXX23
#endif

那么唯一产生错误的地方将是使用 C++23 功能的代码。您可以单独守护它们。

© www.soinside.com 2019 - 2024. All rights reserved.