Honestly though, I'm inclined to argue that functions which return by ref and have a ref parameter of that same type just be considered @system.
What about this:
struct Foo
{
int a;
}
ref int bar(ref Foo foo)
{
return foo.a;
}
the parameter type and the return type here are different, but
bar still returns a reference to its parameter. I guess you
should consider all functions that return ref and have at least
one ref parameter @system (unless they are marked @trusted).
