Subject: Re: [boost] Interest in StaticVector - fixed capacity vector
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-10-15 18:51:40
on Sat Oct 15 2011, Nathan Ridge <zeratul976-AT-hotmail.com> wrote:
> After reading this thread again, it seems to me that the reason we
> can't reach an agreement is that different people are proposing
> two fundamentally different ways of using static_vector:
> 1) As a variant of [std|boost]::array where not all the elements are
> constructed/used at the same time, and which keeps track of
> how many elements are currently in use.
> 2) As a variant of std::vector which keeps its memory on the
> stack, and which is used, literally, as a drop-in replacement
> for std::vector, in the sense that the developer was using
> std::vector, but then identified that in non-exceptional
> situations the actual number of elements used is below a
> certain threshold, and the program could use the
> optimization of not allocating memory dynamically.
> It's clear to me that for use (1), exceeding the bound of the
> static_vector is a logic error and therefore should be undefined
> behaviour, whereas for (2), exceeding the bound of the static_vector
> is not a logic error and therefore throwing an exception is
> My own previous arguments for not throwing were based on the
> assumption that the use case is (1), without giving (2) much thought.
But isn't use-case 2 much better served by a vector that degrades
gracefully by falling back to using the heap? I just can't see how
throwing serves anyone's purpose well.
-- Dave Abrahams BoostPro Computing http://www.boostpro.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk