You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何g++按C++20标准编译chrono时间点输出代码失败?

问题分析与解决方法

1. 先检查你的GCC版本

C20标准中std::chrono::time_point的流式输出支持,是从GCC 11版本开始在libstdc中实现的。如果你的GCC版本低于11,哪怕编译时指定了-std=c++20,也无法使用这个特性。可以用以下命令查看编译器版本:

g++ --version

如果版本过低,需要升级你的GCC编译器。

2. 确认代码的头文件与命名空间

必须确保代码包含了正确的头文件,并且对time_point的调用有正确的命名空间限定:

#include <iostream>
#include <chrono>

int main() {
    auto now = std::chrono::system_clock::now();
    std::cout << now << '\n';
    return 0;
}

如果漏了<chrono>头文件,或者省略了std::chrono::的命名空间限定,编译器会找不到对应的operator<<重载。

3. 补充必要的编译选项

对于GCC 10及更早版本,即使指定了-std=c++20,还需要手动添加-fconcepts选项来启用C++20的概念特性,才能正常编译chrono的流式输出:

g++ -std=c++20 -fconcepts chrono5.cpp -o test

GCC 11及以上版本不需要这个选项,因为概念特性已经默认启用。

4. 排查示例代码的特殊性

如果是Howard Hinnant的示例代码,有可能它使用的是他自己开发的第三方chrono库实现(而非C++20标准库的chrono),这种情况下需要确认代码是否适配了标准库的接口,或者是否需要额外配置依赖。

内容的提问来源于stack exchange,提问作者AlgebraicsAnonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:01:15