C++20 <chrono> 嵌套名称说明符中使用的不完整类型
C++20 <chrono> incomplete type used in nested name specifier
现在 GCC 11, which supports the new calendar and time zone features 已发布,我正尝试在我的代码中使用它们。
使用以下最小示例:
#include <chrono>
#include <iostream>
int main()
{
using namespace std;
cout << chrono::utc_clock::now() << endl;
return EXIT_SUCCESS;
}
使用以下内容编译:
> /usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++-20 main.cpp
给出以下错误:
main.cpp: In function ‘int main()’:
main.cpp:8:36: error: incomplete type ‘std::chrono::utc_clock’ used in
nested name specifier
8 | cout << chrono::utc_clock::now() << endl;
|
我已经调查过这个错误,它似乎通常源于前向声明。有谁知道为什么会这样吗?
我也试过显式链接到新建的 GCC 11 版本的 libstdc++.a:
/usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++20 -L/usr/local/gcc-11.1.0/lib -lstdc++ main.cpp
但是我得到了同样的错误信息。
一些额外信息:
> /usr/local/gcc-11.1.0/bin/g++-11.1 --version
给出以下输出:
g++-11.1 (GCC) 12.0.0 20210427 (experimental)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
这出乎我的意料,因为我期待看到 11.1。我在 MacOS 上构建它,我的 clang++
版本是 12.0.5。这是预期的吗?这可能是问题的潜在来源吗?
此外,显示编译器对 C++20 标准库功能的支持的 this website 表明 GCC 11 对更新的 chrono
具有 部分 支持。
最后,我使用 this video 作为参考从源代码构建了 GCC 11。
目前 gcc 中只有部分 C++20 chrono 支持。 Here is the current state of the libstdc++ source code on this matter. 这显示了 utc_clock
的简单前向声明,没有定义,这与您看到的错误消息一致。
我 看到对 file_clock
的更多支持,包括在 file_clock::time_point
和 [=13= 之间转换的低级 API ].这是一个重要的补充。
此外,我还看到了对 calendrical types in C++20(例如 year_month_day
等)的支持,这就是发行说明所指的内容。
现在 GCC 11, which supports the new calendar and time zone features 已发布,我正尝试在我的代码中使用它们。
使用以下最小示例:
#include <chrono>
#include <iostream>
int main()
{
using namespace std;
cout << chrono::utc_clock::now() << endl;
return EXIT_SUCCESS;
}
使用以下内容编译:
> /usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++-20 main.cpp
给出以下错误:
main.cpp: In function ‘int main()’:
main.cpp:8:36: error: incomplete type ‘std::chrono::utc_clock’ used in
nested name specifier
8 | cout << chrono::utc_clock::now() << endl;
|
我已经调查过这个错误,它似乎通常源于前向声明。有谁知道为什么会这样吗?
我也试过显式链接到新建的 GCC 11 版本的 libstdc++.a:
/usr/local/gcc-11.1.0/bin/g++-11.1 -std=c++20 -L/usr/local/gcc-11.1.0/lib -lstdc++ main.cpp
但是我得到了同样的错误信息。
一些额外信息:
> /usr/local/gcc-11.1.0/bin/g++-11.1 --version
给出以下输出:
g++-11.1 (GCC) 12.0.0 20210427 (experimental)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
这出乎我的意料,因为我期待看到 11.1。我在 MacOS 上构建它,我的 clang++
版本是 12.0.5。这是预期的吗?这可能是问题的潜在来源吗?
此外,显示编译器对 C++20 标准库功能的支持的 this website 表明 GCC 11 对更新的 chrono
具有 部分 支持。
最后,我使用 this video 作为参考从源代码构建了 GCC 11。
目前 gcc 中只有部分 C++20 chrono 支持。 Here is the current state of the libstdc++ source code on this matter. 这显示了 utc_clock
的简单前向声明,没有定义,这与您看到的错误消息一致。
我 看到对 file_clock
的更多支持,包括在 file_clock::time_point
和 [=13= 之间转换的低级 API ].这是一个重要的补充。
此外,我还看到了对 calendrical types in C++20(例如 year_month_day
等)的支持,这就是发行说明所指的内容。