MacOS std::chrono::clock_cast 未找到

问题描述 投票:0回答:1

我正在尝试使用新的 C++20 chrono 库,更具体地说是新的

clock_cast

如果我使用 clang++ 在 Linux 上编译

16.0.6
,它会按预期工作。
但是,如果我尝试在 MacO 上编译,我会遇到以下错误:

error: no member named 'clock_cast' in namespace 'std::chrono'

Clang 在 Mac 上是版本

17.0.5
,所以我希望实现 chrono 库,我需要添加另一个包含吗?
我在网上找不到有关此问题的任何信息。

铿锵版本:

Homebrew clang version 17.0.5
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /opt/homebrew/opt/llvm/bin

也尝试使用默认的 xcode clang 版本,同样的错误。

最小可重现示例:

#include <chrono>

int main() {
    auto time = std::chrono::high_resolution_clock::now();
    auto system_time = std::chrono::clock_cast<std::chrono::system_clock>(time);
}

编译选项:

/opt/homebrew/opt/llvm/bin/clang++ -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_LARGEFILE_SOURCE -isystem /opt/homebrew/Cellar/openssl@3/3.1.4/include -std=gnu++20 -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.0.sdk -fPIC -o test.cpp.o -c test.cpp
c++ macos c++20 clang++ c++-chrono
1个回答
0
投票

尚未实施。

这是 C++20 的 libc++ 状态页面:

https://libcxx.llvm.org/Status/Cxx20.html

相关行是:

P0355R7 LWG 将计时扩展到日历和时区 Jacksonville Partial [9]

脚注是:

[9] P0355:实施状态为:

  • 日历主要在 Clang 7 中完成
  • 输入解析器未完成
  • 流输出由于 P1361R2 已过时 “计时与文本格式的集成”
  • 时区和闰秒正在进行中
  • TAI时钟未完成
  • GPS时钟未完成
  • UTC 时钟未完成

请注意:

auto time = std::chrono::high_resolution_clock::now();
auto system_time = std::chrono::clock_cast<std::chrono::system_clock>(time);

永远不会可移植地工作,因为

high_resolution_clock
system_clock
之间没有明确的关系。在 gcc 上,这些是相同的时钟,因此
clock_cast
仅执行恒等转换。在 libc++ 上,
high_resolution_clock
steady_clock
相同,并且
steady_clock
system_clock
没有定义的关系。

clock_cast
将在以下各项之间执行转换:
system_clock
utc_clock
tai_clock
gps_clock
file_clock
,以及定义这些静态成员函数对之一的任何用户定义时钟:

to_sys
from_sys

to_utc
from_utc

请参阅此答案(“C++20 更新”部分),了解参与

clock_cast
基础设施的用户定义时钟的示例。

© www.soinside.com 2019 - 2024. All rights reserved.