What's the rationale here? alias this and function arguments

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 10 04:55:59 PDT 2015


On Tuesday, 10 March 2015 at 10:36:21 UTC, ketmar wrote:
> On Tue, 10 Mar 2015 10:27:13 +0000, John Colvin wrote:
>
>> struct S {
>> 	int a;
>> 	this(T)(T v)
>> 	{
>> 		this = v;
>> 	}
>> 	void foo(T)(T v) {
>> 		import std.conv : to;
>> 		a = v.to!int;
>> 	}
>> 	alias foo this;
>> }
>> 
>> void bar(S s){}
>> 
>> void main()
>> {
>> 	S s0;
>> 	s0 = "3"; //OK S s = "3"; //OK bar("3"); //Not OK
>> }
>> 
>> It would seem logical that the last one would work as well.
>> What's the reasoning behind this?
>
> autoconversion for function arguments can lead to bug-ridden 
> code, and is
> a perfect way to disaster. besides, it's ambiguous. let's 
> imagine that we
> have struct `S1`, which can be created from string too, and 
> overload of
> `bar` as `void bar (S1 s)`. what `bar` compiler should choose 
> for `bar
> ("3")`?

Ah yep, overloading, that was it. I have the feeling i've asked 
this before and someone else explained it to me but I had 
forgotten. Cheers


More information about the Digitalmars-d-learn mailing list