Hi Gisle,
Post by Gisle Vanem_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
# else
# undef strtoimax
_GL_FUNCDECL_SYS (strtoimax, intmax_t,
(const char *, char **, int) _GL_ARG_NONNULL ((1)));
# endif
Why is there a '#undef strtoimax' if there is *NO* declaration for
'strtoimax()'? Isn't 'HAVE_DECL_STRTOIMAX' supposed to be TRUE is so?
# undef strtoimax
_GL_FUNCDECL_SYS (strtoimax, intmax_t,
(const char *, char **, int) _GL_ARG_NONNULL ((1)));
# endif
I'd understand it better. Ditto for 'strtoumax()'.
The idioms that we use for function declarations in the *.in.h files are
designed to work
- regardless whether the system headers declare the function or not,
define the function as an inline function or not, or declare the symbol
as a macro or not,
- both in C and C++.
The situations where HAVE_DECL_XXX are set to 1 are described in [1].
If some header file does, say,
#define strtoimax(p,e,b) (long long) strtoll ((p),(char**)(e),(b))
then HAVE_DECL_STRTOIMAX will definitely be 0.
Instead of you wondering about these issues on your own, it is probably
better if you show
- the error that you observe,
- the relevant snippet from the gnulib-generated substitute .h file,
- the relevant definitions from config.status, config.h, in combination
with the config.log and the 'configure' output.
We can then analyze it together.
In a testdir from July 2017, with MSVC 14, I have these settings in
config.status:
S["REPLACE_STRTOIMAX"]="0"
S["HAVE_DECL_STRTOIMAX"]="1"
S["GNULIB_STRTOIMAX"]="1"
D["HAVE_STRTOIMAX"]=" 1"
D["HAVE_RAW_DECL_STRTOIMAX"]=" 1"
D["HAVE_DECL_STRTOIMAX"]=" 1"
Is it different for you?
Bruno
[1] https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Generic-Declarations.html