Стандарт С++ запрещает объявление типов или определение чего-либо в пространстве имен std
, но это позволяет вам специализировать стандартные шаблоны STL для пользовательских типов.
Обычно, когда я хочу специализировать std::swap
для моего собственного шаблонного шаблона, я просто делаю:
namespace std
{
template <class T>
void swap(MyType<T>& t1, MyType<T>& t2)
{
t1.swap(t2);
}
}
... и это отлично работает. Но я не совсем уверен, стандартная ли моя обычная практика. Правильно ли я делаю это?