On Wednesday, 21 September 2016 at 21:14:15 UTC, H. S. Teoh wrote:
The problem here is that generic_code.d doesn't (and
shouldn't!) import
usertype.d, so usertype.opBinary is not visible in
generic_code.d. So
when algorithm() tries to look up the '+' operator in `t + u`,
it can't
find the declaration and fails. There is no way to find the
correct
opBinary() because it's not part of UserType, so algorithm()
has no way
to access that symbol.
Using the operator in module main is OK, because main
(rightfully) imports usertype.d, so the operator is visible.
But any generic code that main imports will have a problem
because they can't (and shouldn't!) know ahead of time which
modules contain the declaration they need.
[...]
T
Why wouldn't templates just pull the "context" into them? I'm
sorry if this is a naïve question.