VSCode C++ Intellisense 无法识别 C++20 功能

VSCode C++ Intellisense can't discern C++20 features

我尝试 运行 像

这样的代码
#include <string>
#include <iostream>

int main() {
    std::string str = "This is a string";
    std::cout << str.starts_with("name");
}

但是智能感知会报错

"std::__cxx11::basic_string<char, std::char_traits, std::allocator>" has no member "starts_with" C/C++(135) [6,9]

而且它仍然可以构建并产生正确的结果。 它也可以在头文件中找到实现。 但是宏 __cplusplus 被定义为 201703L 我在构建时已经添加了一个命令-std=c++20,为什么会这样?

编译器:msys2编译的minGW 11.2

假设您正在使用 Microsoft's C/C++ extension,您必须将扩展配置为使用 C++ 20 智能感知标准。

最简单的方法是将 "C_Cpp.default.cppStandard": "c++20" 行添加到 settings.json 文件中。您还可以在名称为 "Cpp Standard" 的 GUI 中找到该设置。从下拉列表中选择 c++20 将获得相同的结果。

请注意,此设置默认设置为全局用户默认值。您可以通过在设置 GUI 中选择 Workspace 选项卡并将 Cpp Standard 下拉菜单更改为 c++20.

来为每个工作空间配置它

至于为什么添加 -std=c++20 标志不起作用:-std=c++20 只是告诉您的编译器使用哪个标准来构建您的代码。 'Intellisense' 不会收到此标志,因为它是独立于编译器的工具,因此不需要支持编译器支持的所有标准。它甚至可能支持更少,尽管 Intellisense 工具通常支持尽可能最新的标准。因此,Intellisense 的语言标准必须与编译器分开配置(在本例中)。

最后说明:更改设置后,尝试关闭并重新打开 VS Code。根据我的经验,更改语言标准设置可能会导致一些奇怪的事情发生。关闭并重新打开 VS Code 似乎可以确保设置更改完全生效。