d - is expression ignores immutable/const? -
i'm using function template void _createattr(t)(args..., in t[]) , testing type of t static if(is(t == char)) in function. when call,
_createattr!char(args...,"somestring") _createattr(args...,"somestring") the compiler never complains.
of course know alias string = immutable(char)[]. in first call type of t , supplied argument don't match, in modifier should take care of that. , in second case should infer t = immutable(char). understand it, immutable(char) , char distinct types, compiler passes test in second case.
the compiler (dmd) seems ignore immutableness of chars in string when doing test.
i couldn't find explanation behavior on dlang.org or in d programming language book.
is compiler bug?
no bug, in qualifier expanding const, equally valid both immutable(char) , char, compiler instantiates once.
if t == char, in t[] means const char[] covers both cases template never needs think immutability. pass mutable string function without problems.
if explicitly did !(immutable(char)) use that, , no longer accept mutable one.
Comments
Post a Comment