Thread overview
alias and UFCS
Jan 24, 2017
ixid
Jan 24, 2017
Las
Jan 24, 2017
ixid
Jan 24, 2017
ixid
Jan 24, 2017
Stefan Koch
Jan 24, 2017
ixid
Jan 24, 2017
Anonymouse
January 24, 2017
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.
January 24, 2017
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.
January 24, 2017
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.
January 24, 2017
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. =)
January 24, 2017
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?
January 24, 2017
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.

January 24, 2017
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?