I'm having a problem with row and column major in symmetric matrices. I'm probably not understanding correctly how the storage takes place in memory.  I assumed upper+column_major storage was the same as lower+row_major. Here's an example:

Upper part of the symmetric matrix:

0.34    0.9     1.17    0.689   1.42
----      1.36    0.9     0.808   0.146
----      ----      0.572   1.55    1.61
----      ----      ----      0.093   1.32
----      ----      ----      ----      0.828


ublas::symmetric_matrix<double, ublas::upper, ublas::column_major> S
double* a = &(S.data()[0]);
ublas::symmetric_matrix<double, ublas::lower, ublas::column_major> S2
double* a2 = &(S2.data()[0]);

Contents of a, a2:
0.34    0.9     1.17    0.689   1.42    1.36    0.9     0.808   0.146   0.572   1.55    1.61    0.093   1.32    0.828


ublas::symmetric_matrix<double, ublas::lower, ublas::row_major> S3;
double* a3 = &(S3.data()[0]);
ublas::symmetric_matrix<double, ublas::upper, ublas::row_major> S4;
double* a4 = &(S4.data()[0]);

Contents of a3, a4:
0.34    0.9     1.36    1.17    0.9     0.572   0.689   0.808   1.55    0.093   1.42    0.146   1.61    1.32    0.828


So, ublas::lower or upper doesn't make any difference to the storage scheme?  From above it seems row/column storage always corresponds to the ros/cols from the lower part of the matrix.