isInfinite isInadequate

monarch_dodra monarchdodra at gmail.com
Tue Mar 12 09:32:22 PDT 2013


On Tuesday, 12 March 2013 at 16:16:07 UTC, Andrei Alexandrescu 
wrote:
> On 3/12/13 11:47 AM, Steven Schveighoffer wrote:
>> On Tue, 12 Mar 2013 11:25:54 -0400, deadalnix 
>> <deadalnix at gmail.com> wrote:
>>
>>> On Tuesday, 12 March 2013 at 10:49:57 UTC, monarch_dodra 
>>> wrote:
>>
>>>> Having "isInfinite" can also have the advantage of 
>>>> protecting users
>>>> from stupid calls. For example, calling "count" on an 
>>>> infinite range
>>>> is forbidden => shifting problems from runtime to compile 
>>>> time is a
>>>> HUGE gain.
>>>>
>>>
>>> Clearly this is a good point. I however think that a static 
>>> assert
>>> within count is much better because it allow to give nicer 
>>> feedback.
>>> The problem with InfiniteRange is that it does gives you 
>>> cryptic error
>>> message like the count function do not exists.
>>>
>>
>> Hm... is there a way to test for inifinitness without 
>> requiring to be an
>> enum?
>>
>> Wouldn't this also be valid?
>>
>> if(!R.init.empty)
>>
>> Essentially, you can evaluate R.init.empty at compile time AND 
>> it's
>> false on an uninitialized range. How can a correctly written
>> non-infinite range pass that?
>>
>> That would make forwarding much easier, as the 'dumb' 
>> implementation
>> still would result in an infinite range.
>
> Crossed my mind a few times that fresh non-infinite ranges 
> should be empty.

s/should/could/

In any case, that's a very dangerous logic to follow. 
Not-initialized means not initialized. At that point, the concept 
of empty or not empty is irrelevant, it's a wrong call.

By the same token, I don't think anybody would expect a call to 
empty on a null class reference to actually succeed.

> But there's no explicit requirement stating that, and I think 
> e.g. one may define a k-elements buffer backed by in-situ 
> storage.
>
> Andrei

Not sure what you mean?


More information about the Digitalmars-d mailing list