On Tuesday, 2 October 2012 at 16:59:38 UTC, Jonathan M Davis
wrote:
On Tuesday, October 02, 2012 18:45:50 Peter Alexander wrote:
On Tuesday, 2 October 2012 at 16:29:28 UTC, Simen Kjaeraas
wrote:
> On 2012-10-02, 18:09, Peter Alexander wrote:
>> On Tuesday, 2 October 2012 at 13:17:45 UTC, monarch_dodra
>>
>> wrote:
>>> If you've ever worked on a template that needs to index a
>>> range, you may have run into this problem: What is the type
>>> you should use to index an RA range?
>>
>> Forgive my ignorance. What's wrong with size_t?
>
> That not all ranges use it? If the range uses int, short,
> byte
> (I wonder why they'd do it, though), using size_t will not
> even
> compile.
That's kind of my point. Unless there's a compelling reason not
to, I'd suggest we standardise on size_t indexing (and length)
and avoid this issue altogether.
C++ containers have a size_type typedef. No one uses it.
Let's keep things simple instead of complicating things for the
sake of unwanted "flexibility".
In general, all ranges _should_ use size_t for both length and
indexing, but
for a few range types in Phobos specifically use ulong (e.g.
IIRC iota does in
order to work properly with ranges or long and ulong on 32-bit
systems). I see
_zero_ reason to support lengths or indices smaller than
size_t. Types that do
that are badly designed IMHO. But we already have a precedent
that you can't
always assume size_t (at least for length - I'm not sure about
indices - but
if length can be specifically ulong and the type is random
access, then its
indices will need to be ulong), so unfortunately, the situation
is not so
simple that you can always assume size_t (even you should
arguably be able
to).
- Jonathan M Davis
Given your stance of "I see _zero_ reason to support lengths or
indices smaller than size_t" and "Types that do that are badly
designed IMHO":
Are you agreeing with my proposed type tightening? If anything,
it weeds out the "bad designs" for which you had no wish to
support, while allowing better support for those that do.