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

g++-11.1.0开启-std=c++2a仍提示std::chrono::parse不存在怎么办

问题原因

是的,你遇到的报错是GCC 11.1.0本身未支持std::chrono::parse特性导致的。

  • std::chrono::parse是C20标准新增的chrono库时间解析接口,GCC的标准库实现libstdc直到13版本才完成对该特性的支持,11.x、12.x版本均未提供该接口,因此编译时会抛出找不到成员的错误。
  • 你使用的-std=c++2a是C20正式冻结前的实验性标准参数,本身就不包含完整的C20特性实现,即使替换为-std=c++20参数,在GCC 11下也会触发相同报错。

解决方案

如果暂时无法升级编译器,可以选择两种替代方案:

  1. 用C标准库的strptime函数解析后手动转换为chrono时间类型,示例代码如下:
#include <ctime>
#include <chrono>
#include <sstream>

std::chrono::sys_time<std::chrono::microseconds> timestamp;
std::stringstream ss = foo();

std::tm tm_buf = {};
strptime(ss.str().c_str(), "%Y-%m-%d %T", &tm_buf);
timestamp = std::chrono::sys_seconds(std::mktime(&tm_buf));
  1. 引入std::chrono日历功能的上游实现Howard Hinnant date库,使用date::parse接口,用法和标准库完全一致,后续升级到GCC 13+后只要替换命名空间即可无缝迁移。

如果可以升级编译器,只要安装GCC 13或更高版本,使用如下编译指令即可正常编译:
g++-13 -std=c++20 -o test time.cc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:54:02