`Alias this` to a mixed in property
Bastiaan Veelo
Bastiaan at Veelo.net
Wed Jan 24 13:24:30 UTC 2018
Hi,
`Alias this` to mixed in properties does not seem to work, see
below. If you think it should, I'll file an issue. Otherwise: can
this be made to work somehow?
Interestingly, if you uncomment either the mixin getter or setter
(row 36 or 37) and its corresponding use in `main`, then the
remaining property works. Does the compiler detect identical
names and then does some additional mangling which messes with my
`alias this` maybe?
```
import std.stdio;
// version = manual; // Manually written property works,
obviously.
mixin template getter()
{
@property int p()
{
writeln(__LINE__, " mixin getter");
return 3;
}
}
mixin template setter(T)
{
@property int p(T arg)
{
writeln(__LINE__, " mixin setter ", typeid(T), ' ', arg);
return 4;
}
}
struct S
{
version (manual) {
@property int p()
{
writeln(__LINE__, " manual getter");
return 3;
}
@property int p(int arg)
{
writeln(__LINE__, " manual setter int ", arg);
return 4;
}
}
else {
mixin getter; // row 36
mixin setter!int; // row 37
}
alias p this;
}
void main(string[] args)
{
S s;
s = 7;
int i = s;
}
```
Error: cannot implicitly convert expression s of type S to int.
More information about the Digitalmars-d-learn
mailing list