On 3/29/2012 4:34 PM, Steven Schveighoffer wrote:
But I realized after typing about 2 messages in response to this (and deleting
them), you are right, there is a fundamental problem here. Because the template
instantiation is based solely on the type. It does *not* include the type and
whatever other modules you may have included that could define extension
methods. I don't think it's an implementation issue, I think it's a design issue
-- there simply is no way to do this.

Yes, you're right. The template is instantiated in the context of the template definition, not the template instantiation. Hence, unless the extension methods are in scope of the template definition, they will not be found.

I hadn't thought of this issue.


So two possible sane rules:
1. A template instantiation can *only* use UFCS from functions defined in or
imported from the module in which the template is defined. (i.e. the way it
works now I think)

Yes, that is the way it works now.


or
2. A template instantiation can *only* use UFCS from functions defined in or
imported from the module in which the template is defined, *and* from functions
as defined or imported by the module that defines the type on which UFCS is
being used.

I would argue that:

3. An extension method for an argument of type template parameter T will be looked up only in the instantiation scope.

Reply via email to