www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Should opIndex take precedence over pointer indexing?

reply claptrap <clap trap.com> writes:
struct Foo
{
     float* what;
     float opIndex(size_t idx) { return what[idx]; }
}

Foo* foo;
float x = foo[idx]; // ***


*** <source>(68): Error: cannot implicitly convert expression 
`foo[cast(ulong)idx]` of type `Foo` to `float`

IE, pointer indexing of 'foo' takes precedence over the opIndex 
of foo. Is this expected?
Jun 12 2020
parent Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
On Friday, June 12, 2020 5:12:35 PM MDT claptrap via Digitalmars-d-learn 
wrote:
 struct Foo
 {
      float* what;
      float opIndex(size_t idx) { return what[idx]; }
 }

 Foo* foo;
 float x = foo[idx]; // ***


 *** <source>(68): Error: cannot implicitly convert expression
 `foo[cast(ulong)idx]` of type `Foo` to `float`

 IE, pointer indexing of 'foo' takes precedence over the opIndex
 of foo. Is this expected?
Yes, it's expected behavior. . is the only operator which implicitly dereferences a pointer. - Jonathan M Davis
Jun 12 2020