W dniu 26.07.2010 22:56, Nick Sabalausky pisze:
"Steven Schveighoffer"<[email protected]>  wrote in message
news:[email protected]...
On Mon, 26 Jul 2010 15:08:32 -0400, Tomek Sowinski<[email protected]>  wrote:

Nick Sabalausky wrote:

Sorry you had to go through that.  My post was an attempt at dry humor
;)

-Steve

Heh, now I get it too. Good one :)

Now me too:) But let's stay on the path:

private void foo();
public alias foo goo;

We gotta do something about this WTF. Either goo should be perfectly
usable
or the compiler shouldn't allow visibility expanding aliases. Which'd you
pick?

Serious now:

Your simple example doesn't make any sense.  Why wouldn't you just make
foo public?  If it's publicly accessible through an alias, it's publicly
accessible.  I don't buy the "too hard to understand" argument.  Just
don't document the "private" members :)

IMO, protection attributes applied to an alias make no sense whatsoever.
I don't think the above code should compile, except dmd accepts lots of
noop attributes...


I disagree. I think it's perfectly rational. Perhaps a better example than
the above:

private void foo_implA() {...}
private void foo_implB() {...}
private void bar_implA() {...}

static if( isDerpDerpDerp )
{
     public alias foo_implA foo;
     public alias bar_implA bar;
}
else
{
     public alias foo_implB foo;

     // If isDerpDerpDerp isn't true, then 'bar' is logically equivilent
     // to the faster foo_implB, so just use that:
     public alias foo_implB bar;
}

I see no reason to disallow something like that.

Yes, or a real-life example (sorry for quoting myself, but seems Steven's joke overshadowed it :) ):

struct PermutationMatrixExpr(Permutation permut) {
    static if (permut == Permutation.RowWise) {
        alias byPermutationDim byRows;
        alias byPermutationOrthoDim byColumns;
    } else {
        alias byPermutationDim byColumns;
        alias byPermutationOrthoDim byRows;
    }

private:

// Definitions for byPermutationDim & byPermutationOrthoDim

}

Let me draw a parallel example:

int x;
const alias x y;  // I want y to be a const view of x

Does this make any sense?


Just because one particular attribute doesn't make sence doesn't mean they
all don't make sence.

Amen.

Can anyone give a good counter-example when a public alias of a non-public symbol is evil?


Tomek

Reply via email to