Behavior of signed/unsigned conversion in template parameters
Peter Alexander
peter.alexander.au at gmail.com
Fri Jul 30 12:52:54 PDT 2010
Just had this error crop up. I just wanted to check whether this is
correct behavior as I don't know the details of D's templates. I'm using
DMD 2.047 to compile with no flags.
struct A(uint N) { }
void b(uint N)() { }
void c(uint N)(A!(N) a) { }
void main()
{
A!(1) a; // OK
b!(1)(); // OK
c!(1)(f); // Error - cannot implicitly convert A!(1) to A!(N)
c(a); // Error - cannot implicitly convert A!(1) to A!(N)
}
Are those errors correct?
If so, why can I instantiate 'A' and 'b' with a signed int parameter,
but can't instantiate 'c'?
It seems that the uint-ness of the template parameter is only enforced
when there is an argument involved, but I don't understand the reasoning
behind this (if any). I would expect either all of these to compile, or
none to compile.
Thanks in advance.
More information about the Digitalmars-d
mailing list