Thread overview | ||||||
---|---|---|---|---|---|---|
|
February 06, 2016 Bug or intended? | ||||
---|---|---|---|---|
| ||||
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. |
February 06, 2016 Re: Bug or intended? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rsw0x | I'd say support for this scenario is not implemented yet. |
February 07, 2016 Re: Bug or intended? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rsw0x | The specification doesn't list (non-static) members a valid template alias parameters: http://dlang.org/spec/template.html#TemplateAliasParameter |
February 08, 2016 Re: Bug or intended? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rsw0x | 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.
|
Copyright © 1999-2021 by the D Language Foundation