As things stand I think boost.multiprecision remains a better solution because of this one feature.
I appreciate that John's intent is to implement the standard verbatim,
but
this has frankly never been a good idea.
While having the ability to convert from string to a decimal is a valid expectation, I do not think it is justified to require that this must be done via a constructor. If not anything else, the author may want to keep the headers smaller and not couple the representation with string parsing.
You may consider from_chars too clumsy, but how do you propose to signal parsing failures given that this library is designed to service environments without exceptions?
You can disable the lines of codes if exceptions are disabled or replace the exception with a terminate. Or it can just be in a separate header so no-exception environments just can't include that one. I agree that the library could use a simple to and from conversion. The charconv is great to have, but is clumsy to use. I think a one-line conversion operation would be great, although the constructor might not be the right place. After all, `double("3.142")` isn't valid C++ (Richard might say "well it should be"). But adding `std::string to_string(decimalX_t)` and `decimalX_t stodX(const std::string &)` (or string_view) wrapper functions for charconv probably wouldn't hurt anyone. Either of those would be fine for me: decimal64_t dec("3.142"); // or auto dec = stod64("3.142"); And it's fine if these functions throw; non-exception environments just can't use them.