sorting hidden data.

Steven Schveighoffer schveiguy at yahoo.com
Mon Oct 4 04:29:53 PDT 2010


On Wed, 29 Sep 2010 16:37:34 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 9/29/10 13:10 PDT, Jacob Carlborg wrote:
>> Would that be the uniform function call syntax that I've been waiting
>> for since I first heard of it?
>
> Yah. One unpleasant issue I found with it (as it's already implemented  
> for arrays) is a chicken-and-egg thing: say I want to provide operation  
> moveFront only if the type doesn't define it yet. Without UCF (Uniform  
> Call Syntax) things are simple:
>
> auto moveFront(R)(ref R r)
> if (!is(typeof(r.moveFront())) && !hasElaborateCopy!(ElementType!R)) {
>      return r.front;
> }
>
> With UCF things get messy because introducing moveFront at global level  
> does make r.moveFront() legit, so the if clause returns true, which is  
> weird because the function shouldn't have been introduced yet. So the  
> compiler gets confused by this lying Cretan riddle - it recurses forever  
> (when R is an array).
>
> The solution would be probably to not consider the symbol introduced  
> until the if-clause has cleared.

__traits(hasMember, r, "moveFront") && rest_of_expression_you_had

-Steve


More information about the Digitalmars-d mailing list