http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49045
--- Comment #4 from Jason Merrill <jason at gcc dot gnu.org> 2011-05-18 18:21:39 UTC --- A workaround would be to use a forwarding function: template<typename _Tp> void swap(_Tp&, _Tp&); template<class T> void __do_swap(T&& a,T&& b) { swap(a,b); } template<typename _Tp, __SIZE_TYPE__ _Nm> void swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) noexcept(noexcept(__do_swap(*__a, *__b))); template<typename _Tp, __SIZE_TYPE__ _Nm> void swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) noexcept(noexcept(__do_swap(*__a, *__b))) { }