`static` on module-level functions

Steven Schveighoffer schveiguy at gmail.com
Fri Jul 7 13:31:59 UTC 2023


On 7/7/23 6:38 AM, IchorDev wrote:
> 
> Well yes, I even mentioned that in the OP. It's just that I'd expect 
> using `static` "incorrectly" to cause an error, like `const` does. 
> Instead, marking something as `static` *actually* does nothing, and 
> nothing really tells you, so it causes a bit of a placebo effect.

D allows no-op attributes in many cases because you can possibly apply 
attributes to a group via `attribute:` or `attribute { ... }`, and you 
may not want to fine-tune which things can get the attribute to avoid 
errors.

Here's a fun one:

```d
enum foo() {
    return "what?";
}
```

What does this mean? `enum` is a storage class, and any storage class 
applied to a function is going to cause the function to be inferred 
return type. So effectively, the `enum` does nothing but take the place 
of `auto`. (`foo` is a function that returns `string`)

However, I can't think of a valid reason to allow `static` on a 
module-level scope. Applying static to a declaration at module-level 
should be a no-op. So maybe that's one "use" of static that can be 
eliminated.

-Steve


More information about the Digitalmars-d-learn mailing list