digitalmars.D.learn - UFCS in template function
- ixid (15/15) Aug 28 2013 UFCS does not work in this template where the normal function
- Jacob Carlborg (4/18) Aug 28 2013 UFCS only works for module level functions.
- ixid (2/3) Aug 29 2013 What is the reason for this limitation?
- Andrej Mitrovic (7/8) Aug 29 2013 However it does work for local imports (I think this was new in 2.063):
- Jacob Carlborg (4/10) Aug 29 2013 "empty" is declared at module scope.
UFCS does not work in this template where the normal function call syntax will work: template test(alias fun) { auto test(T)(T n) { return n.fun; } } Is this the same as the inability to use UFCS with functions declared in the same scope as the call? Is there no way to address this issue without messing with calling class members (that is what I understand to be the reason for the limitation on UFCS, I may have misunderstood). It also prevents the use of function literals in UFCS chains which seems like a great pity and the loss of what should be a very natural part of the language.
Aug 28 2013
On 2013-08-28 23:28, ixid wrote:UFCS does not work in this template where the normal function call syntax will work: template test(alias fun) { auto test(T)(T n) { return n.fun; } } Is this the same as the inability to use UFCS with functions declared in the same scope as the call? Is there no way to address this issue without messing with calling class members (that is what I understand to be the reason for the limitation on UFCS, I may have misunderstood). It also prevents the use of function literals in UFCS chains which seems like a great pity and the loss of what should be a very natural part of the language.UFCS only works for module level functions. -- /Jacob Carlborg
Aug 28 2013
On Thursday, 29 August 2013 at 06:23:32 UTC, Jacob Carlborg wrote:UFCS only works for module level functions.What is the reason for this limitation?
Aug 29 2013
On 8/29/13, Jacob Carlborg <doob me.com> wrote:UFCS only works for module level functions.However it does work for local imports (I think this was new in 2.063): void main() { import std.range; assert([].empty); // ok }
Aug 29 2013
On 2013-08-29 22:02, Andrej Mitrovic wrote:However it does work for local imports (I think this was new in 2.063): void main() { import std.range; assert([].empty); // ok }"empty" is declared at module scope. -- /Jacob Carlborg
Aug 29 2013