www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Alias this member shadowed by imported function identifier?

reply Johan Engelen <j j.nl> writes:
The following code compiles with DMD 2.070, but not with 2.071:

```
module mod;

import std.range;

struct S
{
     struct Inner
     {
         int unique_identifier_name;
         int tail;
     }

     Inner inner;
     alias inner this;

     auto works()
     {
         return unique_identifier_name;
     }

     auto fails()
     {
         return tail; // Line 22
         // The workaround:  return this.tail;
     }
}
```

The 2.071 error is:
tail.d(22): Error: template tail(Range)(Range range, size_t n) if 
(isInputRange!Range && !isInfinite!Range && (hasLength!Range || 
isForwardRange!Range)) has no type

Is this because of the new import rules, or is it a bug?

Thanks,
   Johan
May 27 2016
next sibling parent Kagamin <spam here.lot> writes:
Hmm... I wouldn't expect this to work, but still worth to report 
in bugzilla.
May 27 2016
prev sibling parent reply Steven Schveighoffer <schveiguy yahoo.com> writes:
On 5/27/16 9:33 AM, Johan Engelen wrote:
 The following code compiles with DMD 2.070, but not with 2.071:

 ```
 module mod;

 import std.range;

 struct S
 {
      struct Inner
      {
          int unique_identifier_name;
          int tail;
      }

      Inner inner;
      alias inner this;

      auto works()
      {
          return unique_identifier_name;
      }

      auto fails()
      {
          return tail; // Line 22
          // The workaround:  return this.tail;
      }
 }
 ```

 The 2.071 error is:
 tail.d(22): Error: template tail(Range)(Range range, size_t n) if
 (isInputRange!Range && !isInfinite!Range && (hasLength!Range ||
 isForwardRange!Range)) has no type

 Is this because of the new import rules, or is it a bug?

 Thanks,
    Johan
I believe in the new import rules, all module members should override any imported ones, unless the import is renaming (which is equivalent to aliasing into your local namespace the symbol). Now, the question here is, when does alias this kick in? I would say it should follow alias this before looking outside the module, so I say it's a bug. -Steve
May 27 2016
parent Johan Engelen <j j.nl> writes:
On Friday, 27 May 2016 at 17:00:04 UTC, Steven Schveighoffer 
wrote:
 Now, the question here is, when does alias this kick in? I 
 would say it should follow alias this before looking outside 
 the module, so I say it's a bug.
https://issues.dlang.org/show_bug.cgi?id=16086
May 28 2016