あ、ミスった。変数は極力局在化。
template<class T, std::size_t N> void swap(T(&x)[N], T(&y)[N])
{
for (int ic = 0; ic < N; ++ic) {
T t = x[ic];
x[ic] = y[ic];
y[ic] = t;
}
}