]> Savannah Git Hosting - gnulib.git/commitdiff
stdlib: Avoid syntax errors in libstdc++ header files.
authorBruno Haible <bruno@clisp.org>
Sun, 14 Jul 2024 18:45:46 +0000 (20:45 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 21 Jul 2024 01:16:12 +0000 (03:16 +0200)
* lib/stdlib.in.h: Include <string> before strtol, strtoll, strtoul, or
strtoull gets defined as a macro.

ChangeLog
lib/stdlib.in.h

index 2d98ce074d4bf12dd793b637ec01f4c4fa29ca4e..0b491143c9b4414c64d741e928e99dd3e7fdf27b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2024-07-14  Bruno Haible  <bruno@clisp.org>
+
+       stdlib: Avoid syntax errors in libstdc++ header files.
+       * lib/stdlib.in.h: Include <string> before strtol, strtoll, strtoul, or
+       strtoull gets defined as a macro.
+
 2024-07-14  Bruno Haible  <bruno@clisp.org>
 
        Activate strtold workarounds.
index 47a8856dc75fcbb6dcbbf586cff7ee079b04ad7b..e42368eef270a1948173954ada321d26ccad9ce7 100644 (file)
@@ -117,6 +117,17 @@ struct random_data
 # include <unistd.h>
 #endif
 
+#if ((@GNULIB_STRTOL@ && @REPLACE_STRTOL@) || (@GNULIB_STRTOLL@ && @REPLACE_STRTOLL@) || (@GNULIB_STRTOUL@ && @REPLACE_STRTOUL@) || (@GNULIB_STRTOULL@ && @REPLACE_STRTOULL@)) && defined __cplusplus && !defined GNULIB_NAMESPACE && defined __GNUG__ && !defined __clang__ && defined __sun
+/* When strtol, strtoll, strtoul, or strtoull is going to be defined as a macro
+   below, this may cause compilation errors later in the libstdc++ header files
+   (that are part of GCC), such as:
+     error: 'rpl_strtol' is not a member of 'std'
+   To avoid this, include the relevant header files here, before these symbols
+   get defined as macros.  But do so only on Solaris 11 (where it is needed),
+   not on mingw (where it would cause other compilation errors).  */
+# include <string>
+#endif
+
 /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
    that can be freed by passing them as the Ith argument to the
    function F.  */