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