delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2018/09/06/02:46:08

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:mime-version:references:in-reply-to:from:date
:message-id:subject:to:content-type:content-transfer-encoding;
q=dns; s=default; b=nwRN7dUyIPmk/zgW5N7Jghe4opXbmiT3ueutLV6Dt5g
y9CouoRaXYajO2xfl3imZf1/jJ6/sfau51F072bRI7zrIpDRh2t7y5yuMDtzQZ31
dve5nv6iUcNuB3vxeGMSrThTIxr/uMiHl/k9G2v+U0dTA3WY2CVOrCdAJybNGYqY
=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:mime-version:references:in-reply-to:from:date
:message-id:subject:to:content-type:content-transfer-encoding;
s=default; bh=4ea3ZZorSStK9KOl+a1JioBZ9bI=; b=p0enZKATtkFneaRRM
l2yoE4k/9eY+VlfdvYtPcB/gWopvFphgM5Avlv/b2JVK3II++YuXoi4ZRgsZcsUP
n8dKMIj9oO5suvDy8YGiN0NtEXZ3xEumavA7r5rBmRUyaZWpc8i1WS7T9RaAYfQw
Q/loDzwhs+6krDL/wkk9kYoIm8=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=Requirements, erroneously, oldest, H*c:alternative
X-HELO: mail-wm0-f65.google.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=+zJLarF74Ob8O6/J87TQ1Yyw24NpFFUYBuXOOfL8pSU=; b=Z6WvMrgYvXMkR8RXx8hnsFy36hD7iuercZA1lozoQEQQ0U/r/wVkLzw7ZE+HhRgJ4D 28d11EZUmbh+seLCnVPVCqtlQJKuzk6c3TVjzj69tcmEZaYLxZEhM1KeQOR1tAcWbjij PA6AEomFEmzQju+1+ozh/DzREohtGy8xt5nf22SHH8vXuGVxoKD/vGe/tttVBgf+10Xk /i3wSL0nIYYmMRyxJTyThcDJmhZD/J+E170m4FuR7OrifyGiijg/L4kKfVOE4frJAJ7O BL0vz5BiNjHEHftujkC5wB1u6HVmgfUo04hQZk0JuUcjHTXahmTBgCHtWWNhtG3PxAD5 A1Iw==
MIME-Version: 1.0
References: <CAJn6YFD-zJoH4wtDaRq1EYYLwzWv_EYFWLGm+quj_RobFMv2Dg AT mail DOT gmail DOT com> <55fcf4b3-5fd0-8fa1-6669-5a93a14c863e AT t-online DOT de> <CAJn6YFD+RjY60kDZU7pQP7BHpdxCDGGwg+2yeOM7=XKVER_C1Q AT mail DOT gmail DOT com> <258a1db5-4151-33c7-5db6-2a06f82975c5 AT SystematicSw DOT ab DOT ca>
In-Reply-To: <258a1db5-4151-33c7-5db6-2a06f82975c5@SystematicSw.ab.ca>
From: John Selbie <jselbie AT gmail DOT com>
Date: Wed, 5 Sep 2018 23:45:18 -0700
Message-ID: <CAJn6YFDfNZdr=r+MbNQcRsPyEf8K0-=SXN13Qt5p-m9t=u24Bw@mail.gmail.com>
Subject: Re: Why does -std=c++11 hide certain function calls
To: Brian DOT Inglis AT systematicsw DOT ab DOT ca, cygwin AT cygwin DOT com
X-IsSubscribed: yes
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id w866k6Su020477

> For Unixy builds, just don't specify -std. Only specify -std if you want
to ensure that builds will work with earlier standards, compilers, or
libraries, or for -std=c* without any special language or library features,
in which case you may also want to add -pedantic or more restrictive
options.

Ahhhh…. that was my mistake.  I had erroneously assumed that not specifying
-std would result in the oldest version of C++.  A quick check:

    $ g++ foo.cpp -c -dM -E  | grep cplus
    #define __cplusplus 201402L

I was compiling with C++ 14 the whole time.  And it appears that when -std
is used, the GNU defines are taken out, which ultimately influence how
POSIX_VISIBLE Is defined within <features.h>.

I'm not sure if I agree that -std should hide the functions from unix
headers. (tldr: unix headers are explicitly outside the c++ standard, so
the moment they are included, you might as well assume the developer wants
it all...)

But at last now I'm unblocked.  Thanks everyone.

jrs



On Wed, Sep 5, 2018 at 1:41 PM Brian Inglis <Brian DOT Inglis AT systematicsw DOT ab DOT ca>
wrote:

> On 2018-09-05 13:36, John Selbie wrote:
> > On Wed, Sep 5, 2018 at 11:46 AM Hans-Bernhard Bröker wrote:
> >> Am 05.09.2018 um 07:55 schrieb John Selbie:
> >>> With this: g++ foo.cpp -c -std=c++11
> >>> It compiles fine everywhere else, except CygWin.  Output on Cygwin:
> >> I'm afraid that may mean everywhere else is wrong.
> >>> Yes, switching to -std=gnu++11 or adding -D_DEFAULT_SOURCE to the
> >>> command 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?
>
> >> Because that's what std=c++11 is meant and documented to do.  It turns
> >> off all extensions to the standard language.  And yes, that does include
> >> extensions to the standard libary, up to and including POSIX-specific
> >> content.
> >> For what you want to do, std=c++11 is simply the wrong setting.
>
> > But why is getaddrinfo (and its associated struct types and flag values)
> > considered a "language extension" and hidden via the __POSIX_VISIBILE
> > define when other function declarations in netdb.h (such as
> getservbyname)
> > are not?
> > I don't believe C++ has any formal support for networking.  So it's
> > surprising to see one networking function hidden "because its an
> > extension", but the other very related functions are not. Can you
> elaborate
> > on the decision process that makes it this way?  I honestly don't see
> how a
> > header file qualifies as a language extension, but instead just see it as
> > the interface for a pre-compiled library.
> > Is it because modern C++ is defined to support older POSIX functions, but
> > not newer ones?  Where is that in the standard?
> > As I said before, I'm wanting to be educated on this, because it could
> > influence how I view the writing and building of portable code now and in
> > the future.  But saying, "everywhere else but here is wrong" and because
> ",
> > doesn't help.
>
> Depends on how standards compliant the implementation and the developer
> are.
> Some(/all?) BSDs specify nothing, but POSIX and other standards specify
> feature
> test macros to enable access to those functions be defined for every C
> source
> module that requires them before any includes e.g. for Linux/GLIBC
> getaddrinfo(3):
>
> "Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
>
> getaddrinfo(), freeaddrinfo(), gai_strerror():
>     _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE"
>
> so to be guaranteed access to those functions, you should define and set
> one of
> those symbols, in each source file, build command line, or makefile, which
> -std=gnu* (or no -std flag) does for you. For Unixy builds, just don't
> specify
> -std. Only specify -std if you want to ensure that builds will work with
> earlier
> standards, compilers, or libraries, or for -std=c* without any special
> language
> or library features, in which case you may also want to add -pedantic or
> more
> restrictive options.
>
> --
> Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada
>
> This email may be disturbing to some readers as it contains
> too much technical detail. Reader discretion is advised.
>
> --
> 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
>
>

--
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


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019