----- public void hash (T) (scope const auto ref T record) // @safe // uncomment to compile if (is(T == struct)) { foreach (const ref field; record.tupleof) { hash(field); } } public void hash (T) (scope const auto ref T[] records) @safe { foreach (ref record; records) hash(record); } @safe void main () { struct Foo { Foo[] foo; } Foo foo; hash(foo); } ----- $ dmd test.d $ test.d(15): Error: @safe function test.hash!(Foo).hash cannot call @system function test.hash!(Foo).hash $ test.d(3): test.hash!(Foo).hash is declared here Uncommenting '@safe' makes it compile. The safety should have been inferred.
*** This issue has been marked as a duplicate of issue 7205 ***