www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Bug or intended?

reply rsw0x <anonymous anonymous.com> writes:
I was playing around with alias templates and came across this, I 
reduced it to:

---
struct A(alias C c){

   auto foo(){
     return c.i;
   }
}

struct B{
   C c;
   A!c a;
}

struct C{
   int i;
}
---

It gives me a "need 'this' for 'i' of type 'int'" error.
Feb 06 2016
next sibling parent Kagamin <spam here.lot> writes:
I'd say support for this scenario is not implemented yet.
Feb 06 2016
prev sibling next sibling parent Marc =?UTF-8?B?U2Now7x0eg==?= <schuetzm gmx.net> writes:
The specification doesn't list (non-static) members a valid 
template alias parameters:
http://dlang.org/spec/template.html#TemplateAliasParameter
Feb 07 2016
prev sibling parent cy <dlang verge.info.tm> writes:
On Saturday, 6 February 2016 at 14:15:04 UTC, rsw0x wrote:
 I was playing around with alias templates and came across this, 
 I reduced it to:

 ---
 struct A(alias C c){

   auto foo(){
     return c.i;
   }
 }

 struct B{
   C c;
   A!c a;
 }

 struct C{
   int i;
 }
 ---

 It gives me a "need 'this' for 'i' of type 'int'" error.
I think the "alias C c" you pass actually must be a value "c" of some sort. A!c would have to produce a different A struct, for every c value. (as opposed to A!C which works fine.) So, if you made B with a C with an i = 23, then you'd have an A!(23) and if you made another one with i = 42, you'd have an A!(42). That doesn't seem very useful, for general integers. Maybe if it was an enum of finite, limited size it'd make sense.
Feb 08 2016