On Mon, 14 Nov 2022 08:01:27 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> I'm not sure I follow, I didn't remove anything here?
>
> Sorry my eyes must be playing tricks on me. ??
> 
> Why did you need to add this here?

It's to avoid redefining the linkage as static in os_windows.cpp (where it's 
implemented) after an extern declaration (inside the class), which is forbidden 
by C++11:

> The linkages implied by successive declarations for a given entity shall 
> agree. That is, within a given scope, each declaration declaring the same 
> variable name or the same overloading of a function name shall imply the same 
> linkage.

While 2019 by default seems to ignore this rule and accepts the conflicting 
linkage as a language extension, this can cause issues with newer and stricter 
versions of the Visual C++ compiler (especially with -permissive- passed during 
compilation, which Magnus and Daniel have pointed out in another discussion 
will become the default mode of compilation in the future). It's not possible 
to declare a static friend inside a class, so the addition above takes 
advantage of another C++ feature instead:

> ยง11.3/4 [class.friend]
A function first declared in a friend declaration has external linkage (3.5). 
Otherwise, the function retains its previous linkage (7.1.1).

-------------

PR: https://git.openjdk.org/jdk/pull/11081

Reply via email to