
Would it be okay to you if we would add support for array types to the Boost.Swap utility that is located in the sandbox?
Whether or not this is a good idea depends on whether you think swap is fundamentally an O(1) and/or nonthrowing operation.
The array support I would like to add to boost::swap is non-throwing, as long as the array element type has a non-throwing swap.
David Abrahams wrote:
Sure, but it is not O(1) no matter what the element type does.
For a particular template instantiation of boost::swap, for a particular type of arrays, the number of element swaps would be constant. Doesn't that make it O(1)? :-) Maybe I just don't understand the definition of O(1) well enough. Do you consider the following swap_pod<T> function O(1)? Or is it O(n), having n = sizeof(T)? It would support swapping arrays, as long as their element type is POD. template<typename T> void swap_pod(T & lhs, T & rhs) { unsigned char tmp[sizeof(T)]; std::memcpy(tmp, lhs, sizeof(T)); std::memcpy(lhs, rhs, sizeof(T)); std::memcpy(rhs, tmp, sizeof(T)); } (BTW, my proposal wasn't to use std::memcpy, but instead, to do the swap elementwise, using the custom swap function of the element type, whenever found by ADL.) So do you think that adding array support to boost::swap is /not/ a good idea? Note that boost::array<T,N> /does/ have a swap function, even though it is documented to have no constant complexity. www.boost.org/doc/libs/1_35_0/doc/html/array.html Do you think that boost::array<T,N> should not have one? Kind regards, Niels