Hello!
I've got somehow unexpected behaviour of std::swap with multi_array's
subarray. For example, given a 2x2 multi_array:
boost::multi_array a;
a.resize( boost::extents[2][2] );
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 2; ++j)
a[i][j] = (i+1)*10 + j+1;
std::swap( a[0], a[1] );
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 2; ++j)
std::cout << a[i][j] << " ";
std::cout << std::endl;
}
With msvc 2008 + boost 1.42, one of the rows overwrites the other and
the output is:
21 22
21 22
The fastest hacky solution i've came is this:
namespace std
{
template
void swap( boost::detail::multi_array::sub_array &lhs,
boost::detail::multi_array::sub_array &rhs)
{
boost::multi_array tmp = lhs;
lhs = rhs;
rhs = tmp;
}
} // namespace std
Now, the rows are properly swapped and the output is:
21 22
11 12
Well, probably that's not a problem for now, but I dunno if it's a bug
or std::swap is not supported - coundn't find anything about this.
----------------
Sergey Mitsyn.