Thread overview | |||||
---|---|---|---|---|---|
|
May 11, 2018 pointer to object resolution | ||||
---|---|---|---|---|
| ||||
Hi all, I'm sure, I didn't find something obvious, but: Given this: ´´´ void main() { auto s = S(); s.operator; assert(s.myOp(42)); assert(42 in s); auto sptr = new S(); sptr.operator; assert(sptr.myOp(42)); //assert(42 in sptr); //<-- does not compile } struct S { void operator() const { assert(true); } bool opBinaryRight(string op)(size_t input) const if(op == "in") { return true; } bool myOp(size_t input) { return input in this; } } ´´´ The last line in the main does not compile with the message source/app.d(9,9): Error: incompatible types for `(42) in (sptr)`: `int` and `S*` This behaves differently, w.r.t. to an arbitrary method, like "operator". Why? Is there any workaround? |
May 11, 2018 Re: pointer to object resolution | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex | On 5/11/18 8:53 AM, Alex wrote:
>
> This behaves differently, w.r.t. to an arbitrary method, like "operator". Why? Is there any workaround?
operators don't follow pointers.
Imagine if you had a struct that overloads "+" and then you wanted to use pointer arithmetic, but instead it called ptr.opBinary.
The workaround is to dereference the pointer. e.g. 42 in *sptr;
-Steve
|
May 11, 2018 Re: pointer to object resolution | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Friday, 11 May 2018 at 15:24:08 UTC, Steven Schveighoffer wrote: > On 5/11/18 8:53 AM, Alex wrote: > >> >> This behaves differently, w.r.t. to an arbitrary method, like "operator". Why? Is there any workaround? > > operators don't follow pointers. > > Imagine if you had a struct that overloads "+" and then you wanted to use pointer arithmetic, but instead it called ptr.opBinary. Ah! > The workaround is to dereference the pointer. e.g. 42 in *sptr; > > -Steve Thanks a lot! |
Copyright © 1999-2021 by the D Language Foundation