On Wednesday, 4 September 2013 at 00:56:39 UTC, Jonathan Crapuchettes wrote:
If a range struct (Range) is defined inside another struct (Test), how can the constness or mutability of Test be attributed to the return type of Range.front? I'm running into this problem because I need the range to
be iterated, but I need the pointer in T to be marked const when
appropriate.

Thank you,
JC

Pseudo-Example:
struct Test
{
    static struct T
    {
        uint* ptr;
    }
    ...

    auto opSlice() inout
    {
        static struct Range
        {
            inout(T) front() @property
            {
                ...
            }
            ...
        }

        return Range();
    }
}


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

Reply via email to