alias this and array popFront: is this a bug?

monarch_dodra monarchdodra at gmail.com
Tue Mar 12 09:11:31 PDT 2013


On Tuesday, 12 March 2013 at 14:44:04 UTC, Jonathan M Davis wrote:
> On Tuesday, March 12, 2013 12:28:29 monarch_dodra wrote:
>> IMO, I think accepting the S type makes sense. Thoughts?
>
> Honestly, I find implicit conversion on template constraints to 
> be very
> dangerous, because it's so insanely easy to get something that 
> passes the
> constraint but doesn't actually work with the code (which is a 
> big reason that
> isDynamicArray only works on the exact type).

I agree, things like "isXXX" should answer true iff said thing IS 
an XXX, not merelly "is convertible to".

On the other hand, with proper template semi-specialization, you 
can get the arguments converted at the call site, meaning that 
inside the implementation, the constraints are passed fair and 
square.

> So, I'm not really a fan of the
> idea of the alias this working like you're trying to do. But 
> the fact that
> it's inconsistent definitely isn't good. It should either work 
> with both front
> and popFront or reject both.
>
> - Jonathan M Davis

I definitely agree on the "both" point.

However, given the "philosophy" of "alias this", if a function 
accepts a T, it should be "callable" with an object that defines 
"alias T this" (note I said callable, not accepts... nuance). So 
I'd be inclined to use the "void popFront(T)(ref T[] a)" version.

I'll try to spend the next couple of days to see try to find if a 
case that would break with this scheme.


More information about the Digitalmars-d-learn mailing list