On Friday, 8 April 2016 at 13:28:15 UTC, Daniel Kozak wrote:
From https://dlang.org/spec/attribute.html#ProtectionAttribute
Protection does not participate in name lookup. In particular,
if two symbols with the same name are in scope, and that name
is used unqualified then the lookup will be ambiguous, even if
one of the symbols is inaccessible due to protection. For
example:
module A;
private class Foo {}
module B;
public class Foo {}
import A;
import B;
Foo f1; // error, could be either A.Foo or B.Foo
B.Foo f2; // ok
But Foo f1; // works ok now with 2.071.0
The spec needs to be changed here (it was describing behaviour
that was a long-standing bug).