Maintaining a useless size member for a fixed size vector is not acceptable.
 
In Blitz++, I commonly construct an Array over a float array that only contains
floats. My memory footprint should be exactly the same whether I'm using uBlas
Blitz++ or hand-coded C.  Why not a version that uses an enum?
 
public:
        enum { SIZE = size_ };
private:
        BOOST_UBLAS_BOUNDED_ARRAY_ALIGN value_type data_ [SIZE];
instead of:
 
private:
        size_type size_;
        BOOST_UBLAS_BOUNDED_ARRAY_ALIGN value_type data_ [N];