On 15.04.2016 19:13, Eric wrote:
1 alias J = const C; 2 3 void main(string[] args) 4 { 5 J a = new C(); 6 I!(J) i = a; 7 } 8 9 interface I(V) { } 10 11 class F(V) if (is(V : I!(V))) { } 12 13 class C : I!(J) 14 { 15 F!(J) m; 16 }The above code gives the following compile error: Error: template instance F!(const(C)) does not match template declaration F(V) if (is(V : I!V)) on line 15. If I change line 1 to "alias J = C;" the code will compile. The problem seems to be the template constraint on line 11. I think the constraint says, "If V can be automatically converted to I!(V) then this template can be used". However, line 6 does not give an error, and it seems to be automaticaly converting J to I!(J).
Line 6 isn't accepted either. If you remove the constraint, the compiler complains about it. So it's just the next error in line.
And really const C can't be converted to I!(const C) implicitly. The former is const, the latter is mutable => no go.
