Обычное определение для специализации шаблонной функции примерно так:
class Foo {
[...]
};
namespace std {
template<>
void swap(Foo& left, Foo& right) {
[...]
}
} // namespace std
Но как правильно определить специализацию, когда тип, для которого она специализируется, сам является шаблоном? Вот что у меня есть:
template <size_t Bits>
class fixed {
[...]
};
namespace std {
template<size_t Bits>
void swap(fixed<Bits>& left, fixed<Bits>& right) {
[...]
}
} // namespace std
Это правильный способ объявить swap
? Предполагается, что это специализация шаблонной функции std::swap
, но я не могу сказать, видит ли ее компилятор как таковой или считает, что это перегрузка или что-то в этом роде.