[Issue 19060] [REG2.081] Incorrect "Using this as a type is deprecated" error

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Nov 6 08:19:16 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=19060

--- Comment #8 from RazvanN <razvan.nitu1305 at gmail.com> ---
(In reply to ag0aep6g from comment #7)
> (In reply to RazvanN from comment #6)
> > (In reply to johanengelen from comment #5)
> > > OK, then this is still broken and should receive a deprecation message too:
> > > 
> > > ```
> > > struct S {
> > >     int a;
> > >     bool x;
> > >     public ref foo() {
> > >         alias yoyo = this.x;
> > >         return yoyo;
> > >     }
> > > }
> > > ```
> > 
> > Actually, I don't think it should. Foo can only be called on an instance,
> > therefore `this` does make sense in that context.
> 
> The alias is still to `S.x`. It still doesn't carry `this`.
> 
> For example, this might be surprising:
> 
> ----
> struct S {
>     int x = 1;
>     int foo(S other)
>     {
>         alias yoyo = other.x;
>         return yoyo;
>     }
> }
> 
> void main()
> {
>     import std.stdio;
>     auto s1 = S(1);
>     auto s2 = S(2);
>     writeln(s1.foo(s2)); /* prints "1" */
> }
> ----
> 
> From the alias declaration, one might expect to get `other.x`, i.e. 2.
> 
> 
> > Imagine that you would
> > define a local variable x, if you wouldn't be able to use `this` then the
> > local would mask the member everywhere.
> 
> You can still write `alias x = S.x;`.

This is surprising, indeed, and I would say that this is a bug. Why would it do
that?

--


More information about the Digitalmars-d-bugs mailing list