Thread overview
[Issue 12230] methods do not bind templates via alias parameter
Mar 15, 2016
Kenji Hara
Mar 15, 2016
Kenji Hara
Mar 15, 2016
Vladimir Panteleev
May 24, 2020
b2.temp@gmx.com
Dec 17, 2022
Iain Buclaw
March 15, 2016
https://issues.dlang.org/show_bug.cgi?id=12230

--- Comment #3 from Kenji Hara <k.hara.pg@gmail.com> ---
(In reply to Vladimir Panteleev from comment #0)
> ///////////////////// test.d ////////////////////
> import std.stdio;
> 
> static template T(alias a)
> {
>     void foo() { writeln(a); }
> }
> 
> struct S
> {
>     int i = 1;
>     @property int p() { return 2; }
> 
>     alias ti = T!i; // OK
>     alias tp = T!p; // Error
> }
> /////////////////////////////////////////////////
> 
> The compiler rejects the above code, with the error:
> test.d(5,23): Error: need 'this' for 'p' of type '@property int()'

>From the long discussion in issue 11946, the static template T cannot get any
context even if the aliased symbol a is an instance member.

--
March 15, 2016
https://issues.dlang.org/show_bug.cgi?id=12230

--- Comment #4 from Kenji Hara <k.hara.pg@gmail.com> ---
(In reply to Kenji Hara from comment #3)
> From the long discussion in issue 11946, the static template T cannot get any context even if the aliased symbol a is an instance member.

Or... am I misunderstanding something?

--
March 15, 2016
https://issues.dlang.org/show_bug.cgi?id=12230

--- Comment #5 from Vladimir Panteleev <thecybershadow@gmail.com> ---
Well, for one thing, there is the inconsistence - if fields bind context, why don't methods?

In much broader terms, I really really wish we'd have explicit control over alias context binding, at the instantiation site.

Template aliases can allow for some very powerful things with a few small tweaks. I've written a serialization framework with almost zero overhead which depends on the compiler patches I wrote:

https://github.com/CyberShadow/ae/tree/master/utils/serialization

However, the compiler patches were not accepted so this is mostly defunct.

For personal use I'm still using a patched compiler with PR #3884 reverted. I realize this is hypocritical of me because I argued a lot in favor of that PR (as a fix to code breakage), however I have come to depend on the behavior that PR reverted in my allocators library.

I would like to some day make a case for these small language improvements, but I feel like it would be more wasted work. I almost went mad just from attempting to implement __traits(child) correctly.

--
May 24, 2020
https://issues.dlang.org/show_bug.cgi?id=12230
Issue 12230 depends on issue 12285, which changed state.

Issue 12285 Summary: Allow local symbols in alias parameter to non-static templates when both have same scope https://issues.dlang.org/show_bug.cgi?id=12285

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |WORKSFORME

--
December 17, 2022
https://issues.dlang.org/show_bug.cgi?id=12230

Iain Buclaw <ibuclaw@gdcproject.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P2                          |P3

--