[Issue 23278] Can't pass alias member to a function
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Aug 9 12:50:35 UTC 2022
https://issues.dlang.org/show_bug.cgi?id=23278
RazvanN <razvan.nitu1305 at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |razvan.nitu1305 at gmail.com
--- Comment #3 from RazvanN <razvan.nitu1305 at gmail.com> ---
(In reply to Marcelo Silva Nascimento Mancini from comment #0)
> This trivial code fails to compile with the error message:
> `onlineapp.Test2.mxString!(oops).mxString` need `this` to access member
> `mxString`
>
> ```d
> class Test2
> {
> string oops;
> mixin(mxString!(oops));
> }
> enum mxString(alias c)()
> {
> return "";
> }
> ```
>
> This should compile as there is no dependent usage on "this". Plus, the
> message is obviously wrong as there is no member named `mxString`.
>
> A real use case for that is:
> ```d
> enum mxString(alias c)()
> {
> return typeof(c).stringof~" "~c.stringof~c.stringof~";";
> }
> ```
> Which does not depends on "this", as some code like `mxString!(typeof(oops),
> oops.stringof)` would work.
>
> Mixin template does not have this limitation, so, I believe a normal
> function should not too.
I don't really understand what you are trying to achieve here? mixin templates
are used to insert declarations in a scope. If you want to mixin a function,
why not declare mxString as:
```
class Test2
{
string oops;
mixin mxTempl!(oops);
}
mixin template mxTempl(alias c)
{
enum mxString()
{
return "";
}
}
```
This is an enhancement request at best. However, I don't really see the point
of this code. Why would you want to insert a publicly declared template in the
scope of an aggregate? Why not just call the function template when it is
needed with the appropriate template parameter?
--
More information about the Digitalmars-d-bugs
mailing list