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下也会触发相同报错。
解决方案
如果暂时无法升级编译器,可以选择两种替代方案:
- 用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));
- 引入
std::chrono日历功能的上游实现Howard Hinnant date库,使用date::parse接口,用法和标准库完全一致,后续升级到GCC 13+后只要替换命名空间即可无缝迁移。
如果可以升级编译器,只要安装GCC 13或更高版本,使用如下编译指令即可正常编译:g++-13 -std=c++20 -o test time.cc
内容的提问来源于stack exchange,提问作者amsterdam
相关产品推荐
相关产品推荐

