使用正确的to_chars重载



我正在使用Clang 14(在Apple M1上),它完全支持c++ 17,并且我正在尝试利用新的to_chars函数。这是我非常简单的测试文件:

#include <charconv>
#include <iostream>
int main() {
char a[10];
double pi = 3.141592;
std::to_chars_result res = std::to_chars(a, a+10, pi);
*res.ptr = '';
std::cout << a << std::endl;
}

我的编译命令是clang -std=c++17 test_to_chars.cpp,输出如下:

test_to_chars.cpp:8:30: error: call to deleted function 'to_chars'
std::to_chars_result res = std::to_chars(a, a+10, pi);
^~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/charconv:166:6: note: candidate function has been explicitly deleted
void to_chars(char*, char*, bool, int = 10) = delete;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/charconv:450:1: note: candidate template ignored: requirement 'is_integral<double>::value' was not satisfied [with _Tp = double]
to_chars(char* __first, char* __last, _Tp __value)
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/charconv:458:1: note: candidate function template not viable: requires 4 arguments, but 3 were provided
to_chars(char* __first, char* __last, _Tp __value, int __base)
^
test_to_chars.cpp:8:24: error: no viable conversion from 'void' to 'std::to_chars_result'
std::to_chars_result res = std::to_chars(a, a+10, pi);
^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/charconv:154:25: note: candidate constructor (the implicit copy constructor) not viable: cannot convert argument of incomplete type 'void' to 'const std::to_chars_result &' for 1st argument
struct _LIBCPP_TYPE_VIS to_chars_result
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/v1/charconv:154:25: note: candidate constructor (the implicit move constructor) not viable: cannot convert argument of incomplete type 'void' to 'std::to_chars_result &&' for 1st argument
2 errors generated.

我正在调用to_chars(char*, char*, double),但由于某种原因,它使用隐式转换并试图调用to_chars(char*, char*, bool, int = 10),这是一个已删除的函数。

是否有一种方法可以让我告诉c++,我不希望它将我的双参数转换为bool类型?

我正在使用Clang 14(在Apple M1上),它完全支持c++ 17

不幸的是,这是不正确的。虽然编译器本身具有完整的c++ 17支持,但clang版本(Apple clang 14)的stdlib没有实现任何浮点字符转换功能。

请参阅"基本字符串转换"条目。

需要注意的是,你运行的不是"clang 14",而是"Apple clang 14"。你的代码片段在正常clang下可以正常编译。

相关内容

  • 没有找到相关文章

最新更新