Safer casts

Sean Kelly sean at invisibleduck.org
Tue May 13 21:28:21 PDT 2008


Bill Baxter wrote:
> Sean Kelly wrote:
>> == Quote from Don (nospam at nospam.com.au)'s article
>>> Sean Kelly wrote:
>>>> Janice Caron wrote:
>>>>> 2008/5/13 Sean Kelly <sean at invisibleduck.org>:
>>>>>>  It depends what you mean by "powerful."  Passing a comparator as a
>>>>>> template parameter,
>>>>>>  as with sort!(), means that the choice of comparator must be made at
>>>>>> compile-time rather
>>>>>>  than run-time.  This may be problematic in some instances.
>>>>> I think you meant to say, the choice of comparator /may/ be made at
>>>>> compile-time. Not must.
>>>>>
>>>>>     sort!(compare)(array); // compile time
>>>>>     sort(compare, array); // run time
>>>> I meant the way sort works in std.algorithm.  But it appears that my
>>>> answer was D 1.0-specific.  I had no idea D 2.0 added the option to
>>>> instantiate a template on an alias to a local variable.
>>> It should work in D1.0, as well. It was added not long before D1.00 came
>>> out.
>>
>> It doesn't.  Or more specifically, this doesn't work in D 1.0:
>>
>>     void sort(alias cmp, T)( T buf )
>>     {
>>         // pretend we're sorting
>>         cmp( buf[0], buf[1] );
>>     }
>>
>>     void doSort( int[] buf, bool delegate(int,int) cmp )
>>     {
>>         sort!(cmp)( buf );
>>     }
>>
>>
>> Sean
> 
> Oh, *that's* what you guys are talking about?  Here's the bugzilla bug 
> for it:
> 
> http://d.puremagic.com/issues/show_bug.cgi?id=493

And here I thought D 1.0 just didn't like my aliasing a local variable. 
  Go figure.


Sean



More information about the Digitalmars-d mailing list