Opened 11 years ago
#6626 new Bugs
shallow_array_adaptor bug in swap function
Reported by: | Owned by: | Gunter | |
---|---|---|---|
Milestone: | Boost 1.50.0 | Component: | uBLAS |
Version: | Boost 1.49.0 | Severity: | Problem |
Keywords: | boost::numeric::ublas::shallow_array_adaptor | Cc: |
Description
boost::numeric::ublas::vector< T,shallow_array_adaptor<T> > fails when it is assigned with an expression. For example:
#define BOOST_UBLAS_SHALLOW_ARRAY_ADAPTOR #include <boost/numeric/ublas/vector.hpp> struct point { double x; double y; double z; }; void test() { using namespace boost::numeric::ublas; point p = { 1, 2, 3 } shallow_array_adaptor<double> a(3, &p.x); // Ok, a holds p address vector<double, shallow_array_adaptor<double> > v(a); // Ok, v holds p address v += v; // Ok, now p = { 2, 4, 6 } v /= 2; // Ok, now p = { 1, 2, 3 } v = v*2; // <- Oh no, p = { 1, 2, 3 } !!! }
vector creates a temporary object and it calls to shallow_array_adaptor::swap. This function doesn't check if it is the owner of pointers to swap. When both are data owners can do that (as unbounded_array does). But if they are not then they should swap as bounded_array does.
Attachments (1)
Note:
See TracTickets
for help on using tickets.
Patch of boost::numeric::ublas::shallow_array_adaptor::swap