C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Revising #pragma once

From: connor horman <chorman64_at_[hidden]>
Date: Tue, 27 Aug 2024 16:11:20 -0400
On Tue, 27 Aug 2024 at 15:35, Andrey Semashev via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> On 8/27/24 21:35, Jeremy Rifkin wrote:
> >> Yes, it does. It makes the behavior different from what is expected by
> > majority of users. And is prone to subtle errors, if different headers
> > happen to match in contents.
> >
> > The current behavior expected by the majority of users is hard to argue
> > about because the semantics aren’t spelled out anywhere and every
> > implementation does it differently. #pragma once represents the loose
> > concept of single inclusion, and the semantics proposed here are not
> > prone to the subtle errors of mtimes happening to match, symbolic or
> > hard links not being handled well, certain filesystem mount behavior, or
> > multiple copies of the same header being unintentionally included more
> > than once (e.g. if a library header is copied around).
> >
> > There are few to no cases where you would want to include a file with
> > the same exact contents with #pragma once multiple times. The only case
> > presented here has to do with including a header of only macros then
> > undefining everything then redefining. Such use probably shouldn’t be
> > using an include guard in the first place and it’s important to note
> > that traditional include guards might cause problems there too.
>
> It's not about wanting or not wanting to include headers with exact same
> contents. It may happen by accident that there are two headers that have
> the same contents, and that are using the proposed `#pragma once`, and
> that would prevent those headers to be included. I'm saying that the
> fact that this probability exists, however low it may seem, is a bug in
> specification, which makes the proposal unacceptable. Basically, if a
> user has to gamble on whether the feature works correctly then that
> feature should not exist in the standard.
>
> The fact that gcc took the approach to compare file contents I consider
> a poor choice, and not an argument to standardize this implementation.
>
They didn't even fully take that approach, as they also compare mtime,
which I think is even further argument against that behaviour

>
> > On Tue, Aug 27, 2024 at 12:28 Andrey Semashev via Std-Proposals
> > <std-proposals_at_[hidden] <mailto:std-proposals_at_[hidden]>>
> > wrote:
> >
> > On 8/27/24 20:14, Jeremy Rifkin wrote:
> > > Does using contents for #pragma once break any practical or
> plausible
> > > uses of #pragma once? Does it have any clear downsides?
> >
> > Yes, it does. It makes the behavior different from what is expected
> by
> > majority of users. And is prone to subtle errors, if different
> headers
> > happen to match in contents.
> >
> > > I don’t think does. It should only make things more robust and
> > portable.
> > >
> > > Jeremy
> > >
> > > On Tue, Aug 27, 2024 at 12:07 Andrey Semashev via Std-Proposals
> > > <std-proposals_at_[hidden]
> > <mailto:std-proposals_at_[hidden]>
> > <mailto:std-proposals_at_[hidden]
> > <mailto:std-proposals_at_[hidden]>>>
> > > wrote:
> > >
> > > On 8/27/24 17:01, Jeremy Rifkin via Std-Proposals wrote:
> > > > Hi,
> > > > I have drafted a proposal for standardizing #pragma once.
> > This has
> > > been
> > > > previously proposed a few years ago and I recognize that on
> > top of
> > > being
> > > > difficult to standardize, existing opinions on this topic may
> > > render the
> > > > paper dead on arrival. However, due to its widespread nature
> and
> > > > concerns about portability contributing to it not being used
> > more I
> > > > think it's worth revisiting. I have uploaded the first draft
> at:
> > > >
> > >
> >
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html>
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html>>
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html>
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html
> <
> https://jeremy-rifkin.github.io/cpp-proposals/drafts/pragma-once-draft-1.html
> >>>.
> > >
> > > I think, using file contents for `#pragma once` is wrong and
> > should not
> > > be standardized. The intended effect of `#pragma once` has
> > always been
> > > to avoid including *the same header* twice, not *the same
> > content*.
> > >
> > > --
> > > Std-Proposals mailing list
> > > Std-Proposals_at_[hidden]
> > <mailto:Std-Proposals_at_[hidden]>
> > <mailto:Std-Proposals_at_[hidden]
> > <mailto:Std-Proposals_at_[hidden]>>
> > > https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
> > <https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals>
> > > <https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
> > <https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals>>
> > >
> >
> > --
> > Std-Proposals mailing list
> > Std-Proposals_at_[hidden] <mailto:
> Std-Proposals_at_[hidden]>
> > https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
> > <https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals>
> >
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>

Received on 2024-08-27 20:11:34