Seb*_*rek 5 c++ gcc libstdc++ c++-chrono c++20
现在,支持新日历和时区功能的GCC 11已发布,我正在尝试在我的代码中使用这些功能。
\n使用以下最小示例:
\n#include <chrono>\n#include <iostream>\n\nint main()\n{\n using namespace std;\n\n cout << chrono::utc_clock::now() << endl;\n\n return EXIT_SUCCESS;\n}\nRun Code Online (Sandbox Code Playgroud)\n使用以下内容编译:
\n> /usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++-20 main.cpp\nRun Code Online (Sandbox Code Playgroud)\n给出以下错误:
\nmain.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\nmain.cpp:8:36: error: incomplete type \xe2\x80\x98std::chrono::utc_clock\xe2\x80\x99 used in \n nested name specifier\n 8 | cout << chrono::utc_clock::now() << endl;\n | \nRun Code Online (Sandbox Code Playgroud)\n我调查了这个错误,它似乎通常源于前向声明。有谁知道为什么会发生这种情况?
\n我还尝试显式链接新建的 GCC 11 版本的 libstdc++.a:
\n/usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++20 -L/usr/local/gcc-11.1.0/lib -lstdc++ main.cpp\nRun Code Online (Sandbox Code Playgroud)\n但我收到同样的错误消息。
\n一些额外信息:
\n> /usr/local/gcc-11.1.0/bin/g++-11.1 --version\nRun Code Online (Sandbox Code Playgroud)\n给出以下输出:
\ng++-11.1 (GCC) 12.0.0 20210427 (experimental)\nCopyright (C) 2021 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions. There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nRun Code Online (Sandbox Code Playgroud)\n这对我来说是出乎意料的,因为我期待看到 11.1。我在 MacOS 上构建了这个,我的clang++版本是 12.0.5。这是预期的吗?这可能是问题的潜在根源吗?
此外,该网站显示了编译器对 C++20 标准库功能的支持,表明 GCC 11对更新的chrono.
最后,我使用该视频作为参考从源代码构建了 GCC 11。
\n目前 gcc 中仅支持部分 C++20 chrono。 这是 libstdc++ 源代码关于此事的当前状态。 这显示了 的简单前向声明utc_clock,并且没有定义,这与您看到的错误消息一致。
我发现对 的支持越来越多,包括用于在和file_clock之间进行转换的低级 API 。这是一个重要的补充。file_clock::time_pointsystem_clock::time_point
此外,我看到C++20 中对日历类型的支持(例如year_month_day等),这就是发行说明所指的内容。