
On Wed, Dec 12, 2012 at 7:30 PM, Marshall Clow <mclow.lists@gmail.com>wrote:
On Dec 12, 2012, at 3:26 PM, Olaf van der Spek <ml@vdspek.org> wrote:
On Wed, Dec 12, 2012 at 11:57 PM, Nevin Liber <nevin@eviloverlord.com> wrote:
Another possible solution is to fall back on an allocator if there isn't enough room in the embedded storage. The signature would be something like
static_vector<T, N, A = std::allocator<T>>
And you could provide null_allocator_assert and null_allocator_throw as options (or make one of those the default), as it is now the responsibility of the allocator, not static_vector, to throw or not throw.
That'd make it more like a hybrid_vector, but it's certainly a good idea. It's like a string with a small string optimization.
To me, that's a different container.
-- Marshall
And in fact it *is* a different container. Since the allocator is part of the type, it is a different type. :-) For once, having the allocator as part of the type is a good thing. I posit: 1. we want a hybrid "small string optimization" vector anyhow - I think it would be useful in many places 2. thus assume we have hybrid_vector 3. would we then want static_vector to be different, or just a typedef of hybrid_vector with a particular null_allocator? Tony