www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - support UFCS with fully qualified function names (was in

reply Timothee Cour <thelastmammoth gmail.com> writes:
--047d7b471d9c04216c04dd305d1b
Content-Type: text/plain; charset=ISO-8859-1

(I've re-posting here upon request from bearophile, who seems to like it :)
)

I'd like to be able to use UFCS with fully qualified function names.

A typical use case is to disambiguate , as in the following case:

import std.path;
import std.string;
void main(){
    //Error: std.path.join()(const(char)[] p1, const(char)[] p2, const(char[
])[] more...) at ... conflicts with std.string.join at ...
    auto a="".join("\n");
    //what I'd like to have:
    auto a="".(std.path.join)("\n");
}

note: the fact that std.path.join!().join is deprecated is irrelevant to
this discussion.

Any chance this could be supported?

benefits:
avoids breaking UFCS chains

--047d7b471d9c04216c04dd305d1b
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div><span style=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-s=
ize:13px;background-color:rgb(255,255,255)">(I&#39;ve re-posting here upon =
request from bearophile, who seems to like it :) )</span></div><div><span s=
tyle=3D"color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;bac=
kground-color:rgb(255,255,255)"><br>
</span></div><span style=3D"color:rgb(34,34,34);font-family:arial,sans-seri=
f;font-size:13px;background-color:rgb(255,255,255)">I&#39;d like to be able=
 to use UFCS with fully qualified function names.</span><div style=3D"color=
:rgb(34,34,34);font-family:arial,sans-serif;font-size:13px;background-color=
:rgb(255,255,255)">
<br></div><div style=3D"color:rgb(34,34,34);font-family:arial,sans-serif;fo=
nt-size:13px;background-color:rgb(255,255,255)">A typical use case is to di=
sambiguate , as in the following case:<div><br></div><div><font face=3D"Men=
lo"><span style=3D"color:rgb(0,150,149)">import</span><span style=3D"color:=
rgb(68,68,68)">=A0</span><span style=3D"color:rgb(68,68,68)">std</span><spa=
n style=3D"color:rgb(68,68,68)">.</span><span style=3D"color:rgb(68,68,68)"=
path</span><span style=3D"color:rgb(68,68,68)">;</span><br>

68,68,68)">=A0</span><span style=3D"color:rgb(68,68,68)">std</span><span st= yle=3D"color:rgb(68,68,68)">.</span><span style=3D"color:rgb(0,150,149)">st= ring</span><span style=3D"color:rgb(68,68,68)">;</span><br> <span style=3D"color:rgb(0,150,149)">void</span><span style=3D"color:rgb(68= ,68,68)">=A0</span><span style=3D"color:rgb(68,68,68)">main</span><span sty= le=3D"color:rgb(68,68,68)">(</span><span style=3D"color:rgb(68,68,68)">)</s= pan><span style=3D"color:rgb(68,68,68)">{</span><br> <span style=3D"color:rgb(68,68,68)">=A0=A0=A0=A0</span><span style=3D"font-= style:italic;color:rgb(153,153,136)">//</span><span style=3D"font-style:ita= lic;color:rgb(153,153,136)">Error</span><span style=3D"font-style:italic;co= lor:rgb(153,153,136)">:</span><span style=3D"font-style:italic;color:rgb(15= 3,153,136)">=A0</span><span style=3D"font-style:italic;color:rgb(153,153,13= 6)">std</span><span style=3D"font-style:italic;color:rgb(153,153,136)">.</s= pan><span style=3D"font-style:italic;color:rgb(153,153,136)">path</span><sp= an style=3D"font-style:italic;color:rgb(153,153,136)">.</span><span style= =3D"font-style:italic;color:rgb(153,153,136)">join</span><span style=3D"fon= t-style:italic;color:rgb(153,153,136)">(</span><span style=3D"font-style:it= alic;color:rgb(153,153,136)">)</span><span style=3D"font-style:italic;color= :rgb(153,153,136)">(</span><span style=3D"font-style:italic;color:rgb(153,1= 53,136)">const</span><span style=3D"font-style:italic;color:rgb(153,153,136= )">(</span><span style=3D"font-style:italic;color:rgb(153,153,136)">char</s= pan><span style=3D"font-style:italic;color:rgb(153,153,136)">)</span><span = style=3D"font-style:italic;color:rgb(153,153,136)">[</span><span style=3D"f= ont-style:italic;color:rgb(153,153,136)">]</span><span style=3D"font-style:= italic;color:rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;c= olor:rgb(153,153,136)">p1</span><span style=3D"font-style:italic;color:rgb(= 153,153,136)">,</span><span style=3D"font-style:italic;color:rgb(153,153,13= 6)">=A0</span><span style=3D"font-style:italic;color:rgb(153,153,136)">cons= t</span><span style=3D"font-style:italic;color:rgb(153,153,136)">(</span><s= pan style=3D"font-style:italic;color:rgb(153,153,136)">char</span><span sty= le=3D"font-style:italic;color:rgb(153,153,136)">)</span><span style=3D"font= -style:italic;color:rgb(153,153,136)">[</span><span style=3D"font-style:ita= lic;color:rgb(153,153,136)">]</span><span style=3D"font-style:italic;color:= rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;color:rgb(153,= 153,136)">p2</span><span style=3D"font-style:italic;color:rgb(153,153,136)"=
,</span><span style=3D"font-style:italic;color:rgb(153,153,136)">=A0</span=
<span style=3D"font-style:italic;color:rgb(153,153,136)">const</span><span=

font-style:italic;color:rgb(153,153,136)">char</span><span style=3D"font-st= yle:italic;color:rgb(153,153,136)">[</span><span style=3D"font-style:italic= ;color:rgb(153,153,136)">]</span><span style=3D"font-style:italic;color:rgb= (153,153,136)">)</span><span style=3D"font-style:italic;color:rgb(153,153,1= 36)">[</span><span style=3D"font-style:italic;color:rgb(153,153,136)">]</sp= an><span style=3D"font-style:italic;color:rgb(153,153,136)">=A0</span><span= style=3D"font-style:italic;color:rgb(153,153,136)">more</span><span style= =3D"font-style:italic;color:rgb(153,153,136)">.</span><span style=3D"font-s= tyle:italic;color:rgb(153,153,136)">.</span><span style=3D"font-style:itali= c;color:rgb(153,153,136)">.</span><span style=3D"font-style:italic;color:rg= b(153,153,136)">)</span><span style=3D"font-style:italic;color:rgb(153,153,= 136)">=A0</span><span style=3D"font-style:italic;color:rgb(153,153,136)">at= </span><span style=3D"font-style:italic;color:rgb(153,153,136)">=A0</span><= span style=3D"font-style:italic;color:rgb(153,153,136)">.</span><span style= =3D"font-style:italic;color:rgb(153,153,136)">.</span><span style=3D"font-s= tyle:italic;color:rgb(153,153,136)">.</span><span style=3D"font-style:itali= c;color:rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;color:= rgb(153,153,136)">conflicts</span><span style=3D"font-style:italic;color:rg= b(153,153,136)">=A0</span><span style=3D"font-style:italic;color:rgb(153,15= 3,136)">with</span><span style=3D"font-style:italic;color:rgb(153,153,136)"=
=A0</span><span style=3D"font-style:italic;color:rgb(153,153,136)">std</sp=

tyle=3D"font-style:italic;color:rgb(153,153,136)">string</span><span style= =3D"font-style:italic;color:rgb(153,153,136)">.</span><span style=3D"font-s= tyle:italic;color:rgb(153,153,136)">join</span><span style=3D"font-style:it= alic;color:rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;col= or:rgb(153,153,136)">at</span><span style=3D"font-style:italic;color:rgb(15= 3,153,136)">=A0</span><span style=3D"font-style:italic;color:rgb(153,153,13= 6)">.</span><span style=3D"font-style:italic;color:rgb(153,153,136)">.</spa= n><span style=3D"font-style:italic;color:rgb(153,153,136)">.</span><br> <span style=3D"color:rgb(68,68,68)">=A0=A0=A0=A0</span><span style=3D"color= :rgb(0,150,149)">auto</span><span style=3D"color:rgb(68,68,68)">=A0</span><= span style=3D"color:rgb(68,68,68)">a</span><span style=3D"color:rgb(68,68,6= 8)">=3D</span><span style=3D"color:rgb(245,125,0)">&quot;</span><span style= =3D"color:rgb(245,125,0)">&quot;</span><span style=3D"color:rgb(68,68,68)">= .</span><span style=3D"color:rgb(68,68,68)">join</span><span style=3D"color= :rgb(68,68,68)">(</span><span style=3D"color:rgb(245,125,0)">&quot;</span><= span style=3D"color:rgb(165,62,0)">\n</span><span style=3D"color:rgb(245,12= 5,0)">&quot;</span><span style=3D"color:rgb(68,68,68)">)</span><span style= =3D"color:rgb(68,68,68)">;</span><br> <span style=3D"color:rgb(68,68,68)">=A0=A0=A0=A0</span><span style=3D"font-= style:italic;color:rgb(153,153,136)">//</span><span style=3D"font-style:ita= lic;color:rgb(153,153,136)">what</span><span style=3D"font-style:italic;col= or:rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;color:rgb(1= 53,153,136)">I</span><span style=3D"font-style:italic;color:rgb(153,153,136= )">&#39;</span><span style=3D"font-style:italic;color:rgb(153,153,136)">d</= span><span style=3D"font-style:italic;color:rgb(153,153,136)">=A0</span><sp= an style=3D"font-style:italic;color:rgb(153,153,136)">like</span><span styl= e=3D"font-style:italic;color:rgb(153,153,136)">=A0</span><span style=3D"fon= t-style:italic;color:rgb(153,153,136)">to</span><span style=3D"font-style:i= talic;color:rgb(153,153,136)">=A0</span><span style=3D"font-style:italic;co= lor:rgb(153,153,136)">have</span><span style=3D"font-style:italic;color:rgb= (153,153,136)">:</span><br> <span style=3D"color:rgb(68,68,68)">=A0=A0=A0=A0</span><span style=3D"color= :rgb(0,150,149)">auto</span><span style=3D"color:rgb(68,68,68)">=A0</span><= span style=3D"color:rgb(68,68,68)">a</span><span style=3D"color:rgb(68,68,6= 8)">=3D</span><span style=3D"color:rgb(245,125,0)">&quot;</span><span style= =3D"color:rgb(245,125,0)">&quot;</span><span style=3D"color:rgb(68,68,68)">= .</span><span style=3D"color:rgb(68,68,68)">(</span><span style=3D"color:rg= b(68,68,68)">std</span><span style=3D"color:rgb(68,68,68)">.</span><span st= yle=3D"color:rgb(68,68,68)">path</span><span style=3D"color:rgb(68,68,68)">= .</span><span style=3D"color:rgb(68,68,68)">join</span><span style=3D"color= :rgb(68,68,68)">)</span><span style=3D"color:rgb(68,68,68)">(</span><span s= tyle=3D"color:rgb(245,125,0)">&quot;</span><span style=3D"color:rgb(165,62,= 0)">\n</span><span style=3D"color:rgb(245,125,0)">&quot;</span><span style= =3D"color:rgb(68,68,68)">)</span><span style=3D"color:rgb(68,68,68)">;</spa= n><br> <span style=3D"color:rgb(68,68,68)">}</span><br></font></div><div><font fac= e=3D"Menlo"><span style=3D"color:rgb(68,68,68)"><br></span></font></div><di= v><font face=3D"Menlo"><span style=3D"color:rgb(68,68,68)">note: the fact t= hat=A0</span></font><font color=3D"#444444" face=3D"Menlo">std.path.join!()= .join is deprecated is irrelevant to this discussion.</font></div> <div><font color=3D"#444444" face=3D"Menlo"><br></font></div><div><font col= or=3D"#444444" face=3D"Menlo">Any chance this could be supported?</font></d= iv><div><font color=3D"#444444" face=3D"Menlo"><br></font></div><div><font = color=3D"#444444" face=3D"Menlo">benefits:</font></div> <div><font color=3D"#444444" face=3D"Menlo">avoids breaking UFCS chains</fo= nt></div></div> --047d7b471d9c04216c04dd305d1b--
May 20 2013
next sibling parent "Dicebot" <m.strashun gmail.com> writes:
I think added syntax complexity is not worth the convenience gain.
May 21 2013
prev sibling next sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On Tuesday, May 21, 2013 09:51:14 Dicebot wrote:
 I think added syntax complexity is not worth the convenience gain.

I tend to agree. I don't think that the idea is entirely without merit, but I don't think that it's really much of a loss to not be able to use UFCS in situations like that. The only situation where it could pose a major problem would be with properties, but if we're not going to have strict properties (and it seems pretty clear at this point that we're not going to), then it doesn't really matter, because you can use a property function as a normal function if you have to. - Jonathan M Davis
May 21 2013
prev sibling next sibling parent Timothee Cour <thelastmammoth gmail.com> writes:
--001a11c302680647b804dd36473c
Content-Type: text/plain; charset=ISO-8859-1

 you can use a property function as a normal function if you have to.

I must've missed that. Do you mean this will become valid? struct A{ int x_; property int x(){return x_;} } void main(){ A a; int x1=a.x(); int x2=a.x; }
 I don't think that it's really much of a loss to not be able to use UFCS

I keep running into such situations, because phobos reuses function names a lot in different modules, and it's only going to get worse as phobos size increases. On Tue, May 21, 2013 at 1:22 AM, Jonathan M Davis <jmdavisProg gmx.com>wrote:
 On Tuesday, May 21, 2013 09:51:14 Dicebot wrote:
 I think added syntax complexity is not worth the convenience gain.

I tend to agree. I don't think that the idea is entirely without merit, but I don't think that it's really much of a loss to not be able to use UFCS in situations like that. The only situation where it could pose a major problem would be with properties, but if we're not going to have strict properties (and it seems pretty clear at this point that we're not going to), then it doesn't really matter, because you can use a property function as a normal function if you have to. - Jonathan M Davis

--001a11c302680647b804dd36473c Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable &gt; you can use a property function as a normal=A0function if you have to.= <div><br><div>I must&#39;ve missed that. Do you mean this will become valid= ?</div><div>struct A{</div><div>=A0 int x_;</div><div>=A0 property int x()= {return x_;}</div> <div>}</div><div>void main(){</div><div>A a;</div><div>int x1=3Da.x();</div=
<div>int x2=3Da.x;</div><div>}</div><div><br></div><div>&gt; I=A0don&#39;t=

situations like that</div> <div><br></div><div>I keep running into such situations, because phobos reu= ses function names a lot in different modules, and it&#39;s only going to g= et worse as phobos size increases.<br><br><div class=3D"gmail_quote">On Tue= , May 21, 2013 at 1:22 AM, Jonathan M Davis <span dir=3D"ltr">&lt;<a href= =3D"mailto:jmdavisProg gmx.com" target=3D"_blank">jmdavisProg gmx.com</a>&g= t;</span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p= x #ccc solid;padding-left:1ex"><div class=3D"im">On Tuesday, May 21, 2013 0= 9:51:14 Dicebot wrote:<br> &gt; I think added syntax complexity is not worth the convenience gain.<br> <br> </div>I tend to agree. I don&#39;t think that the idea is entirely without = merit, but I<br> don&#39;t think that it&#39;s really much of a loss to not be able to use U= FCS in<br> situations like that. The only situation where it could pose a major proble= m<br> would be with properties, but if we&#39;re not going to have strict propert= ies<br> (and it seems pretty clear at this point that we&#39;re not going to), then= it<br> doesn&#39;t really matter, because you can use a property function as a nor= mal<br> function if you have to.<br> <span class=3D"HOEnZb"><font color=3D"#888888"><br> - Jonathan M Davis<br> </font></span></blockquote></div><br></div></div> --001a11c302680647b804dd36473c--
May 21 2013
prev sibling next sibling parent reply Jonathan M Davis <jmdavisProg gmx.com> writes:
On Tuesday, May 21, 2013 01:31:36 Timothee Cour wrote:
 you can use a property function as a normal function if you have to.

I must've missed that. Do you mean this will become valid? struct A{ int x_; property int x(){return x_;} } void main(){ A a; int x1=a.x(); int x2=a.x; }
 I don't think that it's really much of a loss to not be able to use UFCS

in situations like that I keep running into such situations, because phobos reuses function names a lot in different modules, and it's only going to get worse as phobos size increases.

It's not 100% clear what's going to happen with property, but given the last major discussion on it, it's quite clear that we're not going to be strictly enforcing property, and the -property flag is going to get the boot (I thought that it was removed from the Phobos build, but it looks like it's still there). It seems likely that property will have no effect on getters, and it may or may not be required on setters. That matter wasn't settled, but it's very clear that strict property enforcement was not wanted by the majority (too many people want optional parens), so the situation where a symbol conflict with a UFCS property makes it impossible to call will be going away (and it currently only exists when -property is used). - Jonathan M Davis
May 21 2013
parent Timon Gehr <timon.gehr gmx.ch> writes:
On 05/21/2013 10:37 AM, Jonathan M Davis wrote:
 On Tuesday, May 21, 2013 01:31:36 Timothee Cour wrote:
 you can use a property function as a normal function if you have to.

I must've missed that. Do you mean this will become valid? struct A{ int x_; property int x(){return x_;} } void main(){ A a; int x1=a.x(); int x2=a.x; }
 I don't think that it's really much of a loss to not be able to use UFCS

in situations like that I keep running into such situations, because phobos reuses function names a lot in different modules, and it's only going to get worse as phobos size increases.

It's not 100% clear what's going to happen with property, but given the last major discussion on it, it's quite clear that we're not going to be strictly enforcing property, and the -property flag is going to get the boot (I thought that it was removed from the Phobos build, but it looks like it's still there). It seems likely that property will have no effect on getters, and it may or may not be required on setters. That matter wasn't settled, but it's very clear that strict property enforcement was not wanted by the majority (too many people want optional parens), so the situation where a symbol conflict with a UFCS property makes it impossible to call will be going away (and it currently only exists when -property is used). - Jonathan M Davis

No, it is the other way round. property void foo(int x){ } void main(){ foo(2); } // this compiles with -property. The consensus (modulo details) was that anything that -property implements will not be implemented and anything that -property does not implement will be implemented.
May 21 2013
prev sibling next sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
On Tuesday, 21 May 2013 at 07:51:15 UTC, Dicebot wrote:
 I think added syntax complexity is not worth the convenience 
 gain.

The added syntax is just a pair of ( ). And the convenience is to not break your programming flux, requiring to get out of the flow programming (http://en.wikipedia.org/wiki/Flow-based_programming), and introducing auxiliary variables. So maybe the added syntax is worth the convenience. Bye, bearophile
May 21 2013
prev sibling next sibling parent "Dicebot" <m.strashun gmail.com> writes:
On Tuesday, 21 May 2013 at 08:49:27 UTC, bearophile wrote:
 The added syntax is just a pair of ( ).

And you can find plenty of comments in property threads about how much this single pair of () matters. In fact it is worse, because it redefines meaning of similar syntax pattern ("a.b") within one expression.
 And the convenience is to not break your programming flux, 
 requiring to get out of the flow programming 
 (http://en.wikipedia.org/wiki/Flow-based_programming), and 
 introducing auxiliary variables. So maybe the added syntax is 
 worth the convenience.

You can just use local selective imports and alias problematic symbol to different name : http://dlang.org/module.html
May 21 2013
prev sibling next sibling parent "nazriel" <spam dzfl.pl> writes:
On Tuesday, 21 May 2013 at 08:31:45 UTC, Timothee Cour wrote:
 I keep running into such situations, because phobos reuses 
 function names a
 lot in different modules, and it's only going to get worse as 
 phobos size
 increases.

In overall it is rather rare case but if it happens I just use renamed or selective imports. I am neutral on this just giving one of alternative solutions for this.
May 21 2013
prev sibling parent Timothee Cour <thelastmammoth gmail.com> writes:
--089e0158b0b6f4ce9d04dec344dd
Content-Type: text/plain; charset=ISO-8859-1

ok I found better:
see:
http://forum.dlang.org/post/mailman.1002.1370829729.13711.digitalmars-d-learn puremagic.com


On Tue, May 21, 2013 at 2:40 PM, Timon Gehr <timon.gehr gmx.ch> wrote:

 On 05/21/2013 10:37 AM, Jonathan M Davis wrote:

 On Tuesday, May 21, 2013 01:31:36 Timothee Cour wrote:

 you can use a property function as a normal function if you have to.

I must've missed that. Do you mean this will become valid? struct A{ int x_; property int x(){return x_;} } void main(){ A a; int x1=a.x(); int x2=a.x; } I don't think that it's really much of a loss to not be able to use UFCS

in situations like that I keep running into such situations, because phobos reuses function names a lot in different modules, and it's only going to get worse as phobos size increases.

It's not 100% clear what's going to happen with property, but given the last major discussion on it, it's quite clear that we're not going to be strictly enforcing property, and the -property flag is going to get the boot (I thought that it was removed from the Phobos build, but it looks like it's still there). It seems likely that property will have no effect on getters, and it may or may not be required on setters. That matter wasn't settled, but it's very clear that strict property enforcement was not wanted by the majority (too many people want optional parens), so the situation where a symbol conflict with a UFCS property makes it impossible to call will be going away (and it currently only exists when -property is used). - Jonathan M Davis

property void foo(int x){ } void main(){ foo(2); } // this compiles with -property. The consensus (modulo details) was that anything that -property implements will not be implemented and anything that -property does not implement will be implemented.

--089e0158b0b6f4ce9d04dec344dd Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable ok I found better:<div><div>see:</div><div><a href=3D"http://forum.dlang.or= g/post/mailman.1002.1370829729.13711.digitalmars-d-learn puremagic.com">htt= p://forum.dlang.org/post/mailman.1002.1370829729.13711.digitalmars-d-learn = puremagic.com</a></div> <div><br></div><br><div class=3D"gmail_quote">On Tue, May 21, 2013 at 2:40 = PM, Timon Gehr <span dir=3D"ltr">&lt;<a href=3D"mailto:timon.gehr gmx.ch" t= arget=3D"_blank">timon.gehr gmx.ch</a>&gt;</span> wrote:<br><blockquote cla= ss=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pa= dding-left:1ex"> <div class=3D"im">On 05/21/2013 10:37 AM, Jonathan M Davis wrote:<br> </div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l= eft:1px #ccc solid;padding-left:1ex"><div class=3D"im"> On Tuesday, May 21, 2013 01:31:36 Timothee Cour wrote:<br> </div><div class=3D"im"><blockquote class=3D"gmail_quote" style=3D"margin:0= 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class=3D= "gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding= -left:1ex"> you can use a property function as a normal function if you have to.<br> </blockquote> <br> I must&#39;ve missed that. Do you mean this will become valid?<br> struct A{<br> =A0 =A0int x_;<br> =A0 =A0 property int x(){return x_;}<br> }<br> void main(){<br> A a;<br> int x1=3Da.x();<br> int x2=3Da.x;<br> }<br> <br> <blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p= x #ccc solid;padding-left:1ex"> I don&#39;t think that it&#39;s really much of a loss to not be able to use= UFCS<br> </blockquote> <br> in situations like that<br> <br> I keep running into such situations, because phobos reuses function names a= <br> lot in different modules, and it&#39;s only going to get worse as phobos si= ze<br> increases.<br> </blockquote> <br></div><div class=3D"im"> It&#39;s not 100% clear what&#39;s going to happen with property, but give= n the last<br> major discussion on it, it&#39;s quite clear that we&#39;re not going to be= strictly<br> enforcing property, and the -property flag is going to get the boot (I tho= ught<br> that it was removed from the Phobos build, but it looks like it&#39;s still= <br> there). It seems likely that property will have no effect on getters, and = it<br> may or may not be required on setters. That matter wasn&#39;t settled, but = it&#39;s<br> very clear that strict property enforcement was not wanted by the majority<= br> (too many people want optional parens), so the situation where a symbol<br> conflict with a UFCS property makes it impossible to call will be going awa= y<br> (and it currently only exists when -property is used).<br> <br> - Jonathan M Davis<br> <br> </div></blockquote> <br> No, it is the other way round.<br> <br> property void foo(int x){ }<br> void main(){ foo(2); } // this compiles with -property.<br> <br> The consensus (modulo details) was that anything that -property implements = will not be implemented and anything that -property does not implement will= be implemented.<br> <br> </blockquote></div><br></div> --089e0158b0b6f4ce9d04dec344dd--
Jun 09 2013