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>

Reply via email to