Я бы подумал о массиве TR1:
std::array<T, int>
Или, если у вас его еще нет,
boost::array<T, int>
, который идентичен для всех намерений и целей.Конечно, валидность std :: swap для элементов зависит от наличия правильного конструктора / оператора копирования.