[Issue 12892] extern(C): label confined to version scope

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Wed Jun 11 13:56:23 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=12892

Walter Bright <bugzilla at digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Hardware|x86_64                      |All
                 OS|Windows                     |All
           Severity|normal                      |enhancement

--- Comment #3 from Walter Bright <bugzilla at digitalmars.com> ---
A few comments:

1. This is working as designed, so I've marked this as an enhancement request
rather than a bug.

2. It applies to all platforms and memory models, so reclassified accordingly.

3. Changing the behavior will break an unknown amount of existing code.

4. Changing the behavior in the compiler will not be simple, as it will no
longer be a parsing/grammar issue but a semantic one.

5. extern(Windows) on non-Windows platforms should produce C linkage behavior
anyway, so this particular usage does not seem to be necessary. I also have to
question why one would need extern(Windows) for any reason other than
interacting with Windows API functions, which don't exist on other platforms.

6. If you really need this behavior, it can easily (but not prettily) be done
using string mixins:

 enum string mydeclarations = q{
    int a;
    void foo();
 };
 version(Win32) {
  enum string linkage = "Windows";
 } else {
  enum string linkage = "C";
 }
 mixin( "extern(" ~ linkage ~ ") {" ~ mydeclarations ~ "}" );

--


More information about the Digitalmars-d-bugs mailing list