Boost logo

Boost :

From: Geoffrey Irving (irving_at_[hidden])
Date: 2006-09-25 00:59:10

On Sat, Sep 23, 2006 at 04:53:00PM +0100, Dave Harris wrote:
> In-Reply-To: <20060922201042.GO21158_at_[hidden]>
> irving_at_[hidden] (Geoffrey Irving) wrote (abridged):
> > Especially if you can make it a static assert (which I'm not sure of).
> Making it a static assert is not straightforward because addresses are not
> compile-time constants. The straightforward way to compute offsets is by
> subtracting addresses.

I wasn't asking whether it was straightforward, just possible.
This should work:

template<class T> class vectorN
    T x1, x2, ..., xN;

    T& operator[](unsigned int i)
    {assert(i<Nu);return (&x1)[i];}

    struct checker:public vectorN
        T padding[256-N];


Since elements of arrays are required to be in contiguous memory locations,
the variables x1 through xN must also be contigous if the static assert
passes. I don't know if this is a necessary condition, but it's certainly

Here I'm assuming that the compiler aligns to at most 256 bytes.


Boost list run by bdawes at, gregod at, cpdaniel at, john at