У меня есть базовый класс шаблона, который выглядит примерно так
Vector. cc:
template<typename T, unsigned int D>
class Vector {
private:
T _data[D];
...
public:
Vector(Vector<T, D>&&);
...
public:
Vector<T, D>& operator=(Vector<T, D>&&);;
};
extern template class Vector<int, 2>;
extern template class Vector<int, 3>;
extern template class Vector<int, 4>;
Vector.h
// include guard
#include "Vector.h"
template<typename T, unsigned int D>
Vector<T, D>::Vector(Vector<T, D>&&) = default;
template<typename T, unsigned int D>
Vector<T, D>& Vector<T, D>::operator=(Vector<T, D>&&) = default;
template class Vector<int, 2>;
template class Vector<int, 3>;
template class Vector<int, 4>;
// include guard
Когда я компилирую это я получаю ошибки error: array used as initializer
и error: invalid array assignment
и предупреждение note: synthesized method [...] first required here
.
Когда я помещаю = default;
в объявление в файле .h
, я не получаю ошибок или предупреждений.
Я читал в нескольких источниках, что могу поставить = default;
в определение, но для меня это не работает.
Что я делаю не так? Я что-то упускаю? Или я просто полагался на неправильные источники?