The following code worked fine in 1.029, but is broken in 1.033 and 1.035 (no other versions tested): void fooA(T:char) (T chr) { } void fooA(T:dchar)(T chr) { } void fooB(T:char) (T[] str) { } void fooB(T:dchar)(T[] str) { } void main() { // Ok in all versions fooA('c'); // DMD 1.029: Ok // DMD 1.033 and 1.035: template main.fooB(T : char) fooB(T : char) matches more than one function template declaration, fooB(T : char) and fooB(T : dchar) fooB("str"c); }
It worked on 1.030. For D2, it was fixed in 2.023.
This worked on 1.031, but fails on 1.032 and later.
The way this was 'fixed' in D2 was to type string literals as dynamic arrays rather than static ones, along with various other string literal changes. Applying this fix to D1 breaks the test suite. I'm concerned that this would be a disruptive change to D1, rather than an improvement, which is not what we should be doing for D1 users.