On Wednesday, 25 January 2012 at 00:08:25 UTC, Timon Gehr wrote:
Accessibility-raising aliases are trivially safe, because the alias declaration must have access to the aliased symbol.

You are probably right about not introducing holes, but I can imagine this getting tricky, and perhaps confusing in some cases. Here are some off the top of my head.

module A;
private class Foo {}
public alias Foo Bar;

In other modules that import A:

Bar b = new typeof(b)(); // typeof(b) is Foo. Is this allowed?

T foo(T)(T x) { return new T(); }
Bar b;
b = foo(b); // T is deduced to Foo, should this work?

Bar b = new Bar();
mixin("b = new " ~ typeof(b).stringof ~ "();"); // This fails, the string is "Foo"


Just thinking about this has made me change my position. Accessibility raising aliases should not be allowed. It's a minefield.

Reply via email to