bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

C++ aliases in <netdb.h>


From: Gisle Vanem
Subject: C++ aliases in <netdb.h>
Date: Thu, 15 Dec 2016 13:11:12 +0100
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0

I get errors from MSVC in <netdb.h> i C++ mode. E.g. in compiling
test-netdb-c++.cc:

  netdb.h(189): error C2440: 'return': cannot convert
  from 'INT (__stdcall *)(PCSTR,PCSTR,const ADDRINFOA *,PADDRINFOA *)' to
  'gnulib_::_gl_getaddrinfo_wrapper::type'

Ditto error for '_gl_freeaddrinfo_wrapper'.

Some of the pre-processed output of the _GL_CXXALIAS_SYS() macro at
line 189 in netdb.h is:
  namespace gnulib_ {
    static const struct _gl_getaddrinfo_wrapper {
      typedef int (*type) (const char * nodename,
                           const char * servname,
                           const struct addrinfo * hints,
                           struct addrinfo ** res);
      __inline operator type () const
      {
        return ::getaddrinfo;  << !! error is here
      }
    }
    getaddrinfo = {};
  }

Instead this requires a 'reinterpret_cast<type>'.
Hence with this patch, it compiles and runs fine:

--- a/netdb.in.h 2016-01-30 20:42:17
+++ b/netdb.in.h 2016-12-15 12:53:28
@@ -170,7 +170,7 @@
                    struct addrinfo **restrict res)
                   _GL_ARG_NONNULL ((4)));
 # endif
-_GL_CXXALIAS_SYS (getaddrinfo, int,
+_GL_CXXALIAS_SYS_CAST (getaddrinfo, int,
                   (const char *restrict nodename,
                    const char *restrict servname,
                    const struct addrinfo *restrict hints,
@@ -184,7 +184,7 @@
 _GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai)
                                       _GL_ARG_NONNULL ((1)));
 # endif
-_GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai));
+_GL_CXXALIAS_SYS_CAST (freeaddrinfo, void, (struct addrinfo *ai));
 _GL_CXXALIASWARN (freeaddrinfo);

 # if @REPLACE_GAI_STRERROR@

---------

This is because of Winsock's __stdcall I assume?

I've not checked all test-*.cc files for such errors.

-- 
--gv



reply via email to

[Prev in Thread] Current Thread [Next in Thread]