On Sat, 16 Jul 2011 00:17:03 +0800, KennyTM~ wrote: > On Jul 16, 11 00:05, Jonathan M Davis wrote: >> On Friday 15 July 2011 23:48:39 KennyTM~ wrote: >>> On Jul 15, 11 23:26, Lars T. Kyllingstad wrote: >>>>>> So here you have had to use Unqual >>>>>> immutable(Unqual!C1)[] setExtension(C1, C2)(in C1[] path, in C2[] >>>>>> ext) immutable(Unqual!C1)[] defaultExtension(C1, C2)(in C1[] >>>>>> path, in C2[] ext) >>>>>> >>>>>> Instead of Unqual isn't it nicer to use a Deconst!() template? >>>> >>>> Hmm, I guess you're right. "shared" shouldn't be stripped, for >>>> instance. >>> >>> Given that immutable( const(char) ) == immutable(char), I think the >>> Unqual! should simply be removed. >> >> I'd still put the Unqual in there. Perhaps it's due to compiler bugs, >> but from what I've seen, it can get kind of funny when you try and have >> an immutable const or a const immutable. Using Unqual makes it very >> clear what you mean. >> >> - Jonathan M Davis > > OK. But I think you should file the compiler bug :) From what I see, > it's that 'immutable' always win. > > -------------------------- > alias const(char) CC; > alias immutable(char) IC; > alias immutable(CC) ICC; > alias const(IC) CIC; > pragma(msg, ICC); > pragma(msg, CIC); > -------------------------- > immutable(char) > immutable(char) > --------------------------
True, but this doesn't apply to the present case. Since the parameters are marked with 'in', they become const(immutable(char)[]), not const (immutable(char))[]. This isn't too hard to fix, but I prefer to use Unqual, Deconst, Mutable, or whatever it ends up being called. -Lars