template<class T> void swap(shared_array<T> & a, shared_array<T> & b) // never throws { a.swap(b); }
template<class T> void swap(shared_array<T> & a, shared_array<T> & b) { a.swap(b); }