On Tuesday, 6 November 2012 at 18:34:04 UTC, Ali Çehreli wrote:

Because in the case of cs, T is 'const(S)', matching the following two instantiations:

1) ref const(S) i
2) const ref const(S) i

The second line has a redundant const. So, they end up having the same signature.

Ali

Oh - that clears it up, thanks. G(T)(ref T i) is really potentially many functions whereas g(ref S i) is only one and no conflict. What is the standard approach in the face of templates to differentiate between const(T) and T?

If templates do you always do something like:

void G(T)(ref T i) if(isMutable!T) { }
void G(T)(const ref T i) { }

Thanks,
Dan

Reply via email to