December 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5342

           Summary: std.array does not respect immutable/const string
                    qualifiers using front/back/etc
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody@puremagic.com
        ReportedBy: sandford@jhu.edu


--- Comment #0 from Rob Jacques <sandford@jhu.edu> 2010-12-11 01:05:42 PST ---
Essentially, the ElementType! of all strings is a mutable dchar, even if the string itself is immutable. This means that generic code, like isAssignable!(ElementType!string, ElementType!string) passes when it shouldn't.

Here is a simple template make fixing this a whole lot less painful.

/// Apply the const-ness of Src to type Dst
template Requal(Src,Dst) {
    static if(is(             Unqual!Src  == Src)) alias              Dst
Requal;
    static if(is(const        Unqual!Src  == Src)) alias const(       Dst)
Requal;
    static if(is(immutable    Unqual!Src  == Src)) alias immutable(   Dst)
Requal;
    static if(is(shared       Unqual!Src  == Src)) alias shared(      Dst)
Requal;
    static if(is(shared(const Unqual!Src) == Src)) alias shared(const Dst)
Requal;
}

// example
Requal!(typeof(A.init[0]), dchar) front(A)(A a) if (is(typeof(A[0])) &&
isNarrowString!A)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------