1
0

fix: try fix clang libcxx charconv issue.

- add compile checker in cmake to detect charconv support status.
- and expose macro for yycc to enable different part of charconv repectively to prevent duplicated defines.
This commit is contained in:
2026-01-23 14:37:21 +08:00
parent 09fea7e0a3
commit 71eb0741f6
13 changed files with 231 additions and 27 deletions

View File

@@ -0,0 +1,8 @@
#include <charconv>
int main(int argc, char **argv) {
auto scientific = std::chars_format::scientific;
auto fixed = std::chars_format::fixed;
auto general = std::chars_format::general;
auto hex = std::chars_format::hex;
}

View File

@@ -0,0 +1,16 @@
#include <charconv>
int main(int argc, char **argv) {
const char probe[] = "0.0";
const char* first = probe;
const char* last = first + sizeof(probe);
{
float value;
auto rv = std::from_chars(first, last, value, std::chars_format::general);
}
{
double value;
auto rv = std::from_chars(first, last, value, std::chars_format::general);
}
}

View File

@@ -0,0 +1,41 @@
#include <charconv>
#include <cstdint>
int main(int argc, char **argv) {
const char probe[] = "0";
const char* first = probe;
const char* last = first + sizeof(probe);
{
std::int8_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::int16_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::int32_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::int64_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::uint8_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::uint16_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::uint32_t value;
auto rv = std::from_chars(first, last, value, 10);
}
{
std::uint64_t value;
auto rv = std::from_chars(first, last, value, 10);
}
}

View File

@@ -0,0 +1,9 @@
#include <charconv>
#include <system_error>
int main(int argc, char **argv) {
std::from_chars_result result {
.ptr = nullptr,
.ec = std::errc{},
};
}

View File

@@ -0,0 +1,16 @@
#include <charconv>
int main(int argc, char **argv) {
char buffer[1024];
char* first = buffer;
char* last = first + sizeof(buffer);
{
float value = 0;
auto rv = std::to_chars(first, last, value, std::chars_format::general, 6);
}
{
double value = 0;
auto rv = std::to_chars(first, last, value, std::chars_format::general, 6);
}
}

View File

@@ -0,0 +1,41 @@
#include <charconv>
#include <cstdint>
int main(int argc, char **argv) {
char buffer[1024];
char* first = buffer;
char* last = first + sizeof(buffer);
{
std::int8_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::int16_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::int32_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::int64_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::uint8_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::uint16_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::uint32_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
{
std::uint64_t value = 0;
auto rv = std::to_chars(first, last, value, 10);
}
}

View File

@@ -0,0 +1,9 @@
#include <charconv>
#include <system_error>
int main(int argc, char **argv) {
std::to_chars_result result {
.ptr = nullptr,
.ec = std::errc{},
};
}