On Monday, 3 September 2012 at 21:44:15 UTC, Jonathan M Davis
wrote:
On Monday, September 03, 2012 23:19:07 Carl Sturtivant wrote:
So I'm wondering if a language extension along the following
lines would solve your problem,
Whoa. Stop right there. Language extension? If you think that
you need a
language extension to solve a problem, odds are that you're
going about things
the wrong way. Sometimes a language extension would indeed be
needed to do
something, but odds are, it's not. D is a very powerful
language. Think long
and hard about how to do something _within_ the language before
you even
consider extending it.
If all you're looking to do is make it so that you don't have
to care whether
you're dealing with an S or S*, then a language extension is
complete
overkill. Just make a wrapper struct. Something like (untested):
struct Wrapper(T)
{
T* ptr;
ref inout(T) get() inout { return *ptr; }
alias get this;
}
Just wrap an S* in that, and you can use it exactly as if it
were an S.
Problem solved.
- Jonathan M Davis
---same thing (specialized to struct S) in my first reply.
I'm just fishing, seeking a boundary.
There is a cleanness issue to discuss. It would be nice to know
what you think about implicit conversion from 'S*' to 'ref S'
(and not the other way as someone seemed to be suggesting). It's
hard for a newish outsider to get a sense of where the boundaries
lie.