How do you test whether a variable is static or not?

DigitalDesigns DigitalDesigns at gmail.com
Sat Jun 16 08:52:20 UTC 2018


On Saturday, 30 July 2016 at 13:04:56 UTC, Ali Çehreli wrote:
> On 07/30/2016 05:47 AM, Jonathan M Davis via 
> Digitalmars-d-learn wrote:
> > I'm writing some serialization code where I need to skip
> static variables.
> > So, I have a symbol from a struct, and I'd like to test
> whether it's static
> > or not.
>
> static variables don't have the .offsetof property:
>
> struct S {
>     int a;
>     static int b;
> }
>
>
> // Bonus question: should field be alias or string?
> template isStaticVar(T, alias field)
> {
>     enum isStaticVar = !__traits(compiles, mixin("T." ~ field ~ 
> ".offsetof"));
> }
>
> void main() {
>     static assert (!isStaticVar!(S, "a"));
>     static assert (isStaticVar!(S, "b"));
> }
>
> Ali

This doesn't work, treats fields in base classes as static.

One way to test if a member is static is if it it doesn't exist 
in tupleof... but this only returns the immediate members and so 
will fail.  I guess one will have to check all base types too and 
if it doesn't exist in any of then it should be static.

Why is it so hard to be able to get basic information like if a 
type is static or not?


More information about the Digitalmars-d-learn mailing list