我正在尝试对一个双精度浮点数调用 std::to_chars
。我的代码在所有编译器上都无法编译(包括gcc 10.2和clang 10.0.1)。
最简可复现的代码(或者在godbolt上面):
#include <charconv>
#include <string>
int main() {
std::string str;
str.resize(30);
auto[ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), double(3.5));
}
我使用了-std=c++17
编译。
我遇到的错误是:
在gcc 10.2上:
<source>: In function 'int main()':
<source>:7:83: error: call of overloaded 'to_chars(char*, char*, double)' is ambiguous
7 | auto[ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), double(3.5));
| ^
In file included from <source>:1:
/.../gcc-10.2.0/include/c++/10.2.0/charconv:366:1: note: candidate: 'std::to_chars_result std::to_chars(char*, char*, char, int)'
...
然后列出所有候选对象。
在clang 10.0.1上,它基本上只是告诉我:
<source>:7:21: error: no matching function for call to 'to_chars'
auto[ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), double(3.5));
^~~~~~~~~~~~~
我尝试了所有在cppreference的std::to_chars
页面中列出的针对double
类型的函数重载,它们都产生不同的错误,但最终没有一种能够正常工作。
我不明白为什么在应该明确的情况下重载分辨率不清楚,或者我在这里做了什么根本性的错误吗?
我想补充说明的是,MSVC可以正常运行而没有任何错误。
std::to_chars_result to_chars(char* first, char* last, double value);
重载似乎尚未在libc++或libstdc++中实现。使用int
调用它是可以的。 - bolov