add char8_t support

This commit is contained in:
Anders Dalvander 2024-11-23 10:21:48 +01:00
parent 65911af27c
commit d3f7113d6e
2 changed files with 19 additions and 4 deletions

View File

@ -149,7 +149,7 @@ int main() {
std::cerr << "parsing failure\n"; std::cerr << "parsing failure\n";
return EXIT_FAILURE; return EXIT_FAILURE;
} }
std::cout << "parsed the number "<< i << std::endl; std::cout << "parsed the number " << i << std::endl;
std::string binstr = "1001111000011001110110111001001010110100111000110001100"; std::string binstr = "1001111000011001110110111001001010110100111000110001100";
@ -158,7 +158,7 @@ int main() {
std::cerr << "parsing failure\n"; std::cerr << "parsing failure\n";
return EXIT_FAILURE; return EXIT_FAILURE;
} }
std::cout << "parsed the number "<< i << std::endl; std::cout << "parsed the number " << i << std::endl;
std::string hexstr = "4f0cedc95a718c"; std::string hexstr = "4f0cedc95a718c";
@ -167,7 +167,7 @@ int main() {
std::cerr << "parsing failure\n"; std::cerr << "parsing failure\n";
return EXIT_FAILURE; return EXIT_FAILURE;
} }
std::cout << "parsed the number "<< i << std::endl; std::cout << "parsed the number " << i << std::endl;
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
``` ```

View File

@ -237,7 +237,12 @@ struct is_supported_char_type
: std::integral_constant<bool, std::is_same<UC, char>::value || : std::integral_constant<bool, std::is_same<UC, char>::value ||
std::is_same<UC, wchar_t>::value || std::is_same<UC, wchar_t>::value ||
std::is_same<UC, char16_t>::value || std::is_same<UC, char16_t>::value ||
std::is_same<UC, char32_t>::value> {}; std::is_same<UC, char32_t>::value
#ifdef __cpp_char8_t
|| std::is_same<UC, char8_t>::value
#endif
> {
};
// Compares two ASCII strings in a case insensitive manner. // Compares two ASCII strings in a case insensitive manner.
template <typename UC> template <typename UC>
@ -748,6 +753,11 @@ template <> constexpr char16_t const *str_const_nan<char16_t>() {
template <> constexpr char32_t const *str_const_nan<char32_t>() { template <> constexpr char32_t const *str_const_nan<char32_t>() {
return U"nan"; return U"nan";
} }
#ifdef __cpp_char8_t
template <> constexpr char8_t const *str_const_nan<char8_t>() {
return u8"nan";
}
#endif
template <typename UC> constexpr UC const *str_const_inf(); template <typename UC> constexpr UC const *str_const_inf();
template <> constexpr char const *str_const_inf<char>() { return "infinity"; } template <> constexpr char const *str_const_inf<char>() { return "infinity"; }
@ -760,6 +770,11 @@ template <> constexpr char16_t const *str_const_inf<char16_t>() {
template <> constexpr char32_t const *str_const_inf<char32_t>() { template <> constexpr char32_t const *str_const_inf<char32_t>() {
return U"infinity"; return U"infinity";
} }
#ifdef __cpp_char8_t
template <> constexpr char8_t const *str_const_inf<char8_t>() {
return u8"infinity";
}
#endif
template <typename = void> struct int_luts { template <typename = void> struct int_luts {
static constexpr uint8_t chdigit[] = { static constexpr uint8_t chdigit[] = {