const ref template vs non-template

2012-11-06 Thread Dan
Why does g(cs) compile but not G(cs)? Thanks, Dan struct S{} void g(ref S i) {} void g(const ref S i) {} void G(T)(ref T i) {} void G(T)(const ref T i) {} void main() { S s; const(S) cs; g(s); g(cs); G(s); // Error: template p.G matches more than one template declaration,

Re: const ref template vs non-template

2012-11-06 Thread Ali Çehreli
On 11/06/2012 09:18 AM, Dan wrote: Why does g(cs) compile but not G(cs)? Thanks, Dan struct S{} void g(ref S i) {} void g(const ref S i) {} void G(T)(ref T i) {} void G(T)(const ref T i) {} void main() { S s; const(S) cs; g(s); g(cs); G(s); // Error: template p.G matches more than one

Re: const ref template vs non-template

2012-11-06 Thread Dan
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 -