为什么 Clang 中删除了 to_chars 和 from_chars 函数

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

我尝试编译我的代码,但 charconv 头文件中的以下函数(即使它没有 .h 扩展名)无法编译,因为它们已在我使用的 Clang 版本中被删除:

void to_chars(char*, char*, bool, int = 10) = delete;
void from_chars(const char*, const char*, bool, int = 10) = delete;

有人知道为什么这些被删除吗?我的代码在 Visual Studio 下编译得很好,但在 Clang 下则不行。当我在 Visual Studio 中调用 to_chars 时,它会调用此函数:

_EXPORT_STD inline to_chars_result to_chars(char* const _First, char* const _Last, const float _Value) noexcept

但是在 Clang 中,调用解析为:

void to_chars(char*, char*, bool, int = 10) = delete;

有人知道发生什么事吗?

这无法在 Clang 上编译:

#include <charconv>
int main()
{
    char str_buffer[512];
    float value_to_convert = 7;
    auto result = std::to_chars(str_buffer, str_buffer + 6, value_to_convert);
    // Call to deleted function to_chars
}
c++ clang std
1个回答
0
投票

clang 的默认标准库

libc++
花了很长时间才为浮点值实现
std::to_chars
,但仍然没有为它们实现
std::from_chars

std::to_chars
浮点类型应该从 clang-16 开始工作(godbolt)。

如果您需要使用这些函数,您可能需要链接不同的 C++ 标准库,例如

libstdc++

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