clang编译器中的C++ 20

C++ 20 in clang compiler

提问人:Physicist 提问时间:8/27/2023 最后编辑:Ted LyngmoPhysicist 更新时间:8/27/2023 访问量:75

问:

我想在我的 Windows 10 操作系统中使用 clang 编译器,所以我下载了 Cygwin 并安装了它。通常编译可以工作,但是当我设置标志(或-std = c ++ 2a)时,clang会产生一些错误:-std=c++20

#include <iostream>
using namespace std;
int main() {
    cout << "Hello world!!!" << endl;
    return 0;
}
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/iostream:39:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ostream:38:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ios:42:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/ios_base.h:41:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/locale_classes.h:40:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/string:55:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/basic_string.h:40:
In file included from /usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/ext/alloc_traits.h:34:
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/alloc_traits.h:263:4: error:
      no member named 'construct_at' in namespace 'std'; did you mean
      'construct'?
          std::construct_at(__p, std::forward<_Args>(__args)...);
          ^~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/alloc_traits.h:360:2: note:
      'construct' declared here
        construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
        ^
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/alloc_traits.h:518:4: error:
      no member named 'construct_at' in namespace 'std'; did you mean
      'construct'?
          std::construct_at(__p, std::forward<_Args>(__args)...);
          ^~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/include/c++/bits/alloc_traits.h:511:2: note:
      'construct' declared here
        construct(allocator_type& __a __attribute__((__unused__)), _Up* __p,
        ^
2 errors generated.

在VM中的Ubuntu上安装的Clang可以正常工作,那么这里可能有什么问题?我想是环境变量,但如果这可能是问题,如何正确设置它们?

我尝试使用 Cygwin 工具重新安装 clang,以检查其他版本或源代码库/编译器的工作原理。我检查了这个问题是否先于其他问题出现。我希望说明如何在 Windows 10 上准确正确地安装 clang 到所有想要工作的东西,但我没有找到它。

叮当 Cygwin C++20

评论

0赞 Ted Lyngmo 8/27/2023
请显示可用于生成错误的最小可重现代码示例
0赞 Physicist 8/27/2023
还行。cpp #include <iostream> using namespace std; int main() { cout<<"Hello world!!!"<<endl; return 0; }
0赞 Ted Lyngmo 8/27/2023
我不相信该程序会导致您在问题中显示的错误。如果它确实如此,我将停止使用该实现。
0赞 Physicist 8/27/2023
但这是真的,只有使用标志 -std=c++20(对于其他标志,如 -std=c++17,它有效)。有趣的是:错误存在于 Cygwin(模拟 Windows 上的 Linux 操作系统)安装在 Windows 10 中的 Clang 中。安装在 Linux 中的 Clang 效果很好。
0赞 Ted Lyngmo 8/27/2023
在这种情况下,我将停止使用该实现。您是否尝试过使用 WSL2 而不是 Gygwin?程序在 WSL2 中编译干净。clang++ -std=c++20

答: 暂无答案