The boost assignment is really nice, but what about the other direction (from vector to scalars)?  This comes up quite often.

ublas::vector<double> f()
{
ublas::vector<double> v(2);
v(0) = 1.1;
v(1) = 2.1;
return v;
}

double x;
double y;

ublas::vector<double> v(2);
v(0) = 1.1;
v(1) = 2.1;

ublas::tie(x, y) = v;
ublas::tie(x, y) = f(); //With function

ublas::matrix<double> mat(2,2); //....
ublas::tie(x, y) = row(mat, 0);

ublas::vector<int> v2(2);
v2(0) = 1;
v2(1) = 2;

        int z;
        ublas::tie(x, z); //With different types



For vector expressions, this seems to be easy enough to do.  See the attached basic implementation for 2 parameters.  With a little boost preprocessor, this could be fairly general.  What do people think?  Are there any boost PP who could generalize this?

-Jesse