But it seems that the "small-buffer" has a fixed calculated alignment which only depends on the value-type and does not consider the alignment of the (dynamic) allocator.
Is this intended or is it a bug in the implementation?
> I wanted to use a boost::container::small_vector for 64-bit aligned
> doubles (to be used with SSE):
> typedef boost::container::small_vector<double, 16,
> aligned_allocator<double, sizeof(__m128)> > sse_double_vector;
> But it seems that the "small-buffer" has a fixed calculated alignment
> which only depends on the value-type and does not consider the alignment
> of the (dynamic) allocator.
Yes, it looks like small_vector does not expose any mechanism for you to control the alignment of its internal "small" storage. So you can only expect that for 'double' the storage is at least alignof(double) aligned. (The aligned_allocator will only apply after that 'small' storage is exhausted of course.)
One solution could be to use std::vector instead with aligned_allocator_adaptor with in conjunction with another custom allocator for a kind of small-size optimization e.g.