February 09, 2006 bug with inner struct templates | ||||
|---|---|---|---|---|
| ||||
Don's comment about how D templates are resolved during compilation instead of optimization got me thinking whether the traditional get/set accessor method for tuples could be replaced by a simple alias, which seems ideal as it doesn't rely on inlining to make the resulting code efficient. What follows is an attempt at this, first with a class, then with a struct. Note that the class version compiles but the struct version breaks. I assume this is a bug?
C:\code\d>type test.d
void main()
{
ClassOf!(int) c = new ClassOf!(int)();
StructOf!(int) s;
int x;
c.ref!() = x;
x = c.ref!();
s.ref!() = x;
x = s.ref!();
}
class ClassOf(Type)
{
Type val;
template ref()
{
alias val ref;
}
}
template StructOf( Type )
{
struct StructOf
{
Type val;
template ref()
{
alias val ref;
}
}
}
C:\code\d>dmd test.d
test.d(10): this for val needs to be type StructOf not type StructOf
C:\code\d>
| ||||
February 12, 2006 Re: bug with inner struct templates | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly Attachments: | Sean Kelly schrieb am 2006-02-09: > Don's comment about how D templates are resolved during compilation instead of optimization got me thinking whether the traditional get/set accessor method for tuples could be replaced by a simple alias, which seems ideal as it doesn't rely on inlining to make the resulting code efficient. What follows is an attempt at this, first with a class, then with a struct. Note that the class version compiles but the struct version breaks. I assume this is a bug? > > C:\code\d>type test.d > void main() > { > ClassOf!(int) c = new ClassOf!(int)(); > StructOf!(int) s; > int x; > > c.ref!() = x; > x = c.ref!(); > > s.ref!() = x; > x = s.ref!(); > } > > class ClassOf(Type) > { > Type val; > > template ref() > { > alias val ref; > } > } > > template StructOf( Type ) > { > struct StructOf > { > Type val; > > template ref() > { > alias val ref; > } > } > } > C:\code\d>dmd test.d > test.d(10): this for val needs to be type StructOf not type StructOf > > C:\code\d> Added to DStress as http://dstress.kuehne.cn/run/a/alias_31_A.d http://dstress.kuehne.cn/run/a/alias_31_B.d http://dstress.kuehne.cn/run/a/alias_31_C.d http://dstress.kuehne.cn/run/a/alias_31_D.d Thomas | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply