On Thu, 05 Sep 2013 23:32:10 +0200, anonymous wrote: > On Thursday, 5 September 2013 at 19:19:42 UTC, Jonathan Crapuchettes > wrote: >> On Wed, 04 Sep 2013 11:49:41 +0200, anonymous wrote: > [...] >>> You can use a Template This Parameter [1] instead of inout: >>> ---- >>> auto opSlice(this This)() >>> { >>> static if(is(This == const)) alias QualifiedT = const >>> T; >>> else alias QualifiedT = T; >>> >>> static struct Range { >>> QualifiedT front() @property { >>> ---- >>> >>> [1] http://dlang.org/template.html#TemplateThisParameter >> >> Thank you for the help. That worked, but now I ran into another similar >> issue. What if the Range struct is being defined outside of the opSlice >> method? I have a number of methods in a struct that return the same >> range type and would rather not have to have duplicate code or need to >> use mixins. >> >> JC > > Templatize Range and pass it This: > ---- > static struct Range(This) > { > static if(is(This == const)) alias QualifiedT = const T; > else alias QualifiedT = T; > > QualifiedT front() @property {...} > } > > auto opSlice(this This)() > { > return Range!This(); > } > > ... more methods in the style of opSlice ... > ---- > > If you need QualifiedT in opSlice, make it a template over This, > too.
Thank you again. It all appears to be working correctly. JC