digitalmars.D - Behavior of signed/unsigned conversion in template parameters
- Peter Alexander (21/21) Jul 30 2010 Just had this error crop up. I just wanted to check whether this is
- Peter Alexander (2/23) Jul 31 2010 Oops. If it wasn't obvious, the c!(1)(f) is meant to be c!(1)(a).
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.
Jul 30 2010
On 30/07/10 8:52 PM, Peter Alexander wrote:
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.
Oops. If it wasn't obvious, the c!(1)(f) is meant to be c!(1)(a).
Jul 31 2010








Peter Alexander <peter.alexander.au gmail.com>