On Mon, Oct 02, 2017 at 03:13:17PM +0100, Jonathan Wakely wrote: > This adds the integral overloads of std::to_chars and std::from_chars, > including the changes made by P0682R0. Support for floating point types > is absent. > > This uses a number of suggestions from Lars (thanks!) but I might have > missed some of his ideas and so could be missing some potential > optimizations. > > An earlier version of the patch was posted in > https://gcc.gnu.org/ml/libstdc++/2017-04/msg00025.html > > * include/Makefile.am: Add new <charconv> header. > * include/Makefile.in: Regenerate. > * include/precompiled/stdc++.h: Include <charconv>. > * include/std/charconv: New file. > (to_chars_result, to_chars, from_chars_result, from_chars): Define. > * testsuite/20_util/from_chars/1.cc: New test. > * testsuite/20_util/from_chars/1_neg.cc: New test. > * testsuite/20_util/from_chars/2.cc: New test. > * testsuite/20_util/from_chars/requirements.cc: New test. > * testsuite/20_util/to_chars/1.cc: New test. > * testsuite/20_util/to_chars/1_neg.cc: New test. > * testsuite/20_util/to_chars/2.cc: New test. > * testsuite/20_util/to_chars/requirements.cc: New test. > > Tested powerpc64le-linux, committed to trunk.
This fails on 32-bit targets, there are too many closing >s if __int128_t is missing. Either of the attached patches fixes this, which one do you prefer (or do you want yet another formatting)? Jakub
2017-10-02 Jakub Jelinek <ja...@redhat.com> * include/std/charconv (__unsigned_least_t): Fix number of closing >s for !_GLIBCXX_USE_INT128. --- libstdc++-v3/include/std/charconv.jj 2017-10-02 18:51:40.000000000 +0200 +++ libstdc++-v3/include/std/charconv 2017-10-02 21:37:16.085823955 +0200 @@ -81,7 +81,11 @@ namespace __detail #if _GLIBCXX_USE_INT128 conditional_t<(sizeof(_Tp) <= sizeof(__int128)), unsigned __int128, #endif - void>>>>; + void +#if _GLIBCXX_USE_INT128 + > +#endif + >>>; // Generic implementation for arbitrary bases. template<typename _Tp>
2017-10-02 Jakub Jelinek <ja...@redhat.com> * include/std/charconv (__unsigned_least_t): Fix number of closing >s for !_GLIBCXX_USE_INT128. --- libstdc++-v3/include/std/charconv.jj 2017-10-02 18:51:40.000000000 +0200 +++ libstdc++-v3/include/std/charconv 2017-10-02 21:44:02.416799016 +0200 @@ -80,8 +80,10 @@ namespace __detail conditional_t<(sizeof(_Tp) <= sizeof(long long)), unsigned long long, #if _GLIBCXX_USE_INT128 conditional_t<(sizeof(_Tp) <= sizeof(__int128)), unsigned __int128, -#endif void>>>>; +#else + void>>>; +#endif // Generic implementation for arbitrary bases. template<typename _Tp>