On Thursday, 7 July 2016 at 12:39:51 UTC, Steven Schveighoffer
wrote:
Yes, it is a problem. I still don't understand how the
*calling* of a private function is the problem, vs. the
aliasing of it. Why aren't we preventing the aliasing of the
private function in the first place (if not allowed)? If you
can get an alias, you should be able to call it.
I understand that aliases are strange in this way. What we
really need is an alias to the protection level. An explicit
permission given to an external template that says "for this
one instantiation, you can pretend you have access to this".
A workaround, of course, is to use a delegate.
I came across this when learning vibe.d, which gets around the
requirement in an interesting way:
https://github.com/rejectedsoftware/vibe.d/issues/1516
-Steve
It makes sense that the aliasing a private member works, when it
is made at the instantiation site it is perfectly visible. It
only gets mucked up when the alias travels out of that context
into the template where it is no longer visible.