www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - alias and UFCS

reply ixid <adamsibson protonmail.com> writes:
This code:

T tFunc(alias F, T)(T n) {
	n.F;
	return n;
}

Produces this error:

Error: no property 'F' for type 'int[]' (or whatever type I use).

The alias rules for functions seem to be incompatible with UFCS, 
F(n) works fine. What are the rewrite steps here? Is this 
necessary or an oversight? Not very uniform function call syntax.
Jan 24
next sibling parent reply Las <lasssafin gmail.com> writes:
On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 This code:

 T tFunc(alias F, T)(T n) {
 	n.F;
 	return n;
 }

 Produces this error:

 Error: no property 'F' for type 'int[]' (or whatever type I 
 use).

 The alias rules for functions seem to be incompatible with 
 UFCS, F(n) works fine. What are the rewrite steps here? Is this 
 necessary or an oversight? Not very uniform function call 
 syntax.
Submit a bug report then.
Jan 24
parent reply ixid <adamsibson protonmail.com> writes:
On Tuesday, 24 January 2017 at 15:57:48 UTC, Las wrote:
 On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 This code:

 T tFunc(alias F, T)(T n) {
 	n.F;
 	return n;
 }

 Produces this error:

 Error: no property 'F' for type 'int[]' (or whatever type I 
 use).

 The alias rules for functions seem to be incompatible with 
 UFCS, F(n) works fine. What are the rewrite steps here? Is 
 this necessary or an oversight? Not very uniform function call 
 syntax.
Submit a bug report then.
I will if it turns out the behaviour is wrong, that's what I'm checking at this stage. =)
Jan 24
parent reply ixid <adamsibson protonmail.com> writes:
On Tuesday, 24 January 2017 at 16:27:50 UTC, ixid wrote:
 On Tuesday, 24 January 2017 at 15:57:48 UTC, Las wrote:
 On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 This code:

 T tFunc(alias F, T)(T n) {
 	n.F;
 	return n;
 }

 Produces this error:

 Error: no property 'F' for type 'int[]' (or whatever type I 
 use).

 The alias rules for functions seem to be incompatible with 
 UFCS, F(n) works fine. What are the rewrite steps here? Is 
 this necessary or an oversight? Not very uniform function 
 call syntax.
Submit a bug report then.
I will if it turns out the behaviour is wrong, that's what I'm checking at this stage. =)
Apologies for the extra post - does the alias function count as declared in the same scope as the content of the function? That would be plausible as UFCS refuses to work on functions declared in the same scope. Is this something that could be changed?
Jan 24
parent reply Stefan Koch <uplink.coder googlemail.com> writes:
On Tuesday, 24 January 2017 at 16:41:12 UTC, ixid wrote:
 On Tuesday, 24 January 2017 at 16:27:50 UTC, ixid wrote:
 On Tuesday, 24 January 2017 at 15:57:48 UTC, Las wrote:
 On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 [...]
Submit a bug report then.
I will if it turns out the behaviour is wrong, that's what I'm checking at this stage. =)
Apologies for the extra post - does the alias function count as declared in the same scope as the content of the function? That would be plausible as UFCS refuses to work on functions declared in the same scope. Is this something that could be changed?
UFCS is only applied if the function if defined at module scope. This to to prevent the meaning of a ufcs function from changing.
Jan 24
parent ixid <adamsibson gmail.com> writes:
On Tuesday, 24 January 2017 at 20:51:49 UTC, Stefan Koch wrote:
 On Tuesday, 24 January 2017 at 16:41:12 UTC, ixid wrote:
 On Tuesday, 24 January 2017 at 16:27:50 UTC, ixid wrote:
 On Tuesday, 24 January 2017 at 15:57:48 UTC, Las wrote:
 On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 [...]
Submit a bug report then.
I will if it turns out the behaviour is wrong, that's what I'm checking at this stage. =)
Apologies for the extra post - does the alias function count as declared in the same scope as the content of the function? That would be plausible as UFCS refuses to work on functions declared in the same scope. Is this something that could be changed?
UFCS is only applied if the function if defined at module scope. This to to prevent the meaning of a ufcs function from changing.
Does alias of an existing function count as a new function definition in that case?
Jan 24
prev sibling parent Anonymouse <asdf asdf.net> writes:
On Tuesday, 24 January 2017 at 13:11:41 UTC, ixid wrote:
 This code:

 T tFunc(alias F, T)(T n) {
 	n.F;
 	return n;
 }

 Produces this error:

 Error: no property 'F' for type 'int[]' (or whatever type I 
 use).
I believe UFCS is supposed to only work with top-level functions. I don't remember the rationale behind the decision.
Jan 24