std::from_chars_result(3)

NAME
std::from_chars_result - std::from_chars_result

Synopsis
   Defined in header <charconv>
   struct from_chars_result; (since C++17)
   std::from_chars_result is the return type of std::from_chars. It has no base
   classes, and only has the following members.

Notes
   Feature-test macro Value Std Feature
                      201611L (C++17) Elementary string conversions (std::to_chars,
   __cpp_lib_to_chars std::from_chars)
                      202306L (C++26) Testing for success or failure of <charconv>
                        functions

Example
// Run this code
 #include <cassert>
 #include <charconv>
 #include <iomanip>
 #include <iostream>
 #include <optional>
 #include <string_view>
 #include <system_error>
 int main()
 {
     for (std::string_view const str : {"1234", "15 foo", "bar", " 42", "5000000000"})
     {
         std::cout << "String: " << std::quoted(str) << ". ";
         int result{};
         auto [ptr, ec] = std::from_chars(str.data(), str.data() + str.size(), result);
         if (ec == std::errc())
             std::cout << "Result: " << result << ", ptr -> " << std::quoted(ptr) << '\n';
         else if (ec == std::errc::invalid_argument)
             std::cout << "This is not a number.\n";
         else if (ec == std::errc::result_out_of_range)
             std::cout << "This number is larger than an int.\n";
     }
     // C++23's constexpr from_char demo / C++26's operator bool() demo:
     auto to_int = [](std::string_view s) -> std::optional<int>
     {
         int value{};
 #if __cpp_lib_to_chars >= 202306L
         if (std::from_chars(s.data(), s.data() + s.size(), value))
 #else
         if (std::from_chars(s.data(), s.data() + s.size(), value).ec == std::errc{})
 #endif
             return value;
         else
             return std::nullopt;
     };
     assert(to_int("42") == 42);
     assert(to_int("foo") == std::nullopt);
 #if __cpp_lib_constexpr_charconv and __cpp_lib_optional >= 202106
     static_assert(to_int("42") == 42);
     static_assert(to_int("foo") == std::nullopt);
 #endif
 }

Output:
 String: "1234". Result: 1234, ptr -> ""
 String: "15 foo". Result: 15, ptr -> " foo"
 String: "bar". This is not a number.
 String: " 42". This is not a number.
 String: "5000000000". This number is larger than an int.

See also
   from_chars converts a character sequence to an integer or floating-point value
   (C++17) (function)