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