From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 87294 invoked by alias); 5 Sep 2018 05:56:11 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 87283 invoked by uid 89); 5 Sep 2018 05:56:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=Searching, educated, H*c:alternative X-HELO: mail-wr1-f46.google.com Received: from mail-wr1-f46.google.com (HELO mail-wr1-f46.google.com) (209.85.221.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 05 Sep 2018 05:56:08 +0000 Received: by mail-wr1-f46.google.com with SMTP id k5-v6so6202843wre.10 for ; Tue, 04 Sep 2018 22:56:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=OdtY36qcgsizPOAhz7jEQIdHiBsj2B5HoRsK5tIA1Ak=; b=jKnhvddeDfXpPvsqRG/QHSl3hXBKq8y0TRwfSeeGmyV7GFnXfcDHo5WIqkBfR9B3m0 DiK8jjA72Emlk2qqmm7J84o0YYdUJm3iDswIJpoRGTRLWkkAs2CqN+QYvwhj0W09j+US G6fifnDCY7L19+FNibNaeqeHXRMKKSdw+W3x2RqhH4rKzOtGLdzmYIhLZg889RdqscNa qu/ryoqtW6XFbAqw7epaPv6IlOl7T2OiJ23ipKsGNpmAtdC+Z4s4cb/LbsylJ8kLy6T4 c/dytHRKghzZ4AF++xF/QIeokgY68Brp+I/ndjuK3m5OrzPNHM7faCBE6E8qaIxQrpWr GzKw== MIME-Version: 1.0 From: John Selbie Date: Wed, 05 Sep 2018 05:56:00 -0000 Message-ID: Subject: Why does -std=c++11 hide certain function calls To: cygwin@cygwin.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2018-09/txt/msg00085.txt.bz2 Updating Stuntman (Open source Stun Server) from C++ to modern C++. I ran into an issue. This code: #include #include #include int some_networking_code() { addrinfo* addr =3D NULL; int flags =3D AI_NUMERICHOST; return 0; } Compiles fine everywhere: with: g++ foo.cpp -c With this: g++ foo.cpp -c -std=3Dc++11 It compiles fine everywhere else, except CygWin. Output on Cygwin: foo.cpp: In function =E2=80=98int some_networking_code()=E2=80=99: foo.cpp:8:4: error: =E2=80=98addrinfo=E2=80=99 was not declared in this= scope foo.cpp:9:16: error: =E2=80=98AI_NUMERICHOST=E2=80=99 was not declared = in this scope Digging in further, I see that /usr/include/netdb.h has macros for blocking declarataion of these items: #if __POSIX_VISIBLE >=3D 200112 && !defined(__INSIDE_CYGWIN_NET__) struct addrinfo { int ai_flags; /* input flags */ =E2=80=A6 #endif And when the macros are inspected with: g++ foo.cpp -c -std=3Dc++11 -dM -E= | grep POSIX_VIS We can see that: #define __POSIX_VISIBLE 0 Which explains the compiler output. Searching the mailing list archives, I see I'm not the first to observe something this: http://sourceware.org/ml/cygwin/2017-01/msg00392.html Yes, switching to -std=3Dgnu++11 or adding -D_DEFAULT_SOURCE to the command line line works. But I don't understand why the need to enforce these extensions to get access to some of the most common unix libraries? When the goal of Cygwin is to allow Unix code to be rebuilt for Windows easily, it feels dirty that my Makefile will need Cygwin specific adjustments. Why not just take out the __POSIX_VISIBLE>=3D200112 check altogether? If I'm missing the point of something obvious, I'd be open to be educated on this. Thanks, jselbie -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple