On Mon, Oct 10, 2022, at 12:11 PM, Hasselmann Mathias wrote:
> I am surprised by the question: "It's non-standard and it's behavior is 
> undefined" actually should be enough to avoid such feature.

I suggest that you don't look at the implementation of things like Q_OFFSETOF, 
then. ;-)

// This macro can be used to calculate member offsets for types with a non 
standard layout.
// It uses the fact that offsetof() is allowed to support those types since 
C++17 as an optional
// feature. All our compilers do support this, but some issue a warning, so we 
wrap the offsetof()
// call in a macro that disables the compiler warning.

Well, it's just one example that I could quickly think of, but I think it's not 
uncalled for that a project just relies on the implementation of the set of 
supported compilers doing the same, or something equivalent enough. It's hard 
to tell how widespread is the use of #pragma once, but note that in a simple 
Reddit poll done a few months ago, the pragma got 65% of the votes, almost 
twice as include guards:

https://www.reddit.com/r/cpp/comments/rxb6r2/include_guards_or_pragma_once/

> Actually if a reliable implementation of "#pragma once" would be 
> possible, that feature would have been included in the C++ standard for 
> a long time already, wouldn't it?

Same example. The comment on Q_OFFSETOF hints that C++17 seems to allow for 
optional implementations to go beyond what the standard specifies. Why is not 
standardized then? I think the same could be said about this pragma. What it 
does is conceptually very simple, and if it only can hurt on very corner cases, 
then it's a matter of weighting the tradeoffs.
_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to