Привет, друзья!
Прошу помочь с вопросом, как мне реализовать сабдж? Предлагаю выполнить на примере std::swap.
Пробовал через
C++ (Qt)
namespace std {
template<> void swap(MyClass &, MyClass &);
}
В gcc всё работает, а clang выдаёт ошибку. Как будет правильно по стандарту выполнить специализацию?
Эмм... что у вас там работает - неясно, ничего работать не должно
Объявление и реализация шаблонного класса в принципе стиснута рамками одного header-файла. Прежде чем специализировать шаблонный класс компилятору требуется его полное определение. Я в свое время тоже маялся этой манией написать короткое чистенькое объявление класса в .h, а детали, как полагается вынести в .cpp, но все закончилось бесконечными ошибками компиляции. И только позже из документации/книг по шаблонам узнал, что компилятор не ползает по разным файлам в поисках частей одного и того же шаблона.