C++20 <chrono> 嵌套名称说明符中使用的不完整类型

问题描述

既然支持 GCC 11new 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。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)