Type Inference in @safe unittests

jmh530 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 22 09:11:11 PDT 2017


I'm not sure if this is a bug or not.

I was playing around with printing out some member types with 
unittests and I was noticing some strange results when they were 
in @safe unittests rather than normal unittests. The first one 
prints out what I would expect, but the @safe unittest puts @safe 
@nogc nothrow and pure on them, as if it is re-writing the struct 
as a template (or maybe just the functions as templates, I don't 
know).

private enum isPrivate(T, string member) = !__traits(compiles, 
__traits(getMember, T, member));

void printMemberTypes(alias T)()
{
     foreach(memberName; __traits(allMembers, T))
     {
         static if(!isPrivate!(T, memberName)) {
             writeln(typeid(typeof(__traits(getMember, T, 
memberName))));
         }
     }
}

unittest
{
     struct Foo {
         int foo(int i, string s) @safe { return 0; }
         double foo2(string s) @safe { return 0; }
     }

     printMemberTypes!(Foo);
}

@safe unittest
{
     struct Foo {
         int foo(int i, string s) @safe { return 0; }
         double foo2(string s) @safe { return 0; }
     }

     printMemberTypes!(Foo);
}


More information about the Digitalmars-d-learn mailing list