У меня есть класс, который хранит данные, я хочу написать оператор, что работает так:
T[] + container.
Я думал реализовать 4 шаблона, по
T(&&)[] по
const T(&)[] по
const container& по
container&&, чтобы не создавались промежуточные объекты а сразу мог происходить
std::move в
container&& из
T(&&)[]. При этом контейнер создавался и возвращался новый, если был передан
const container&.
Но случилась ошибка
С2666. Уже на стадии 2х шаблонов:
template<size_t N, typename T, typename U>
dynamic_array<T> operator +(const U (&array)[N], const dynamic_array<T>& dyn_array);
template<size_t N, typename T, typename U>
dynamic_array<T> operator +(U (&&array)[N], const dynamic_array<T>& dyn_array);
Ошибка была именно в записи:
dynamic_array<int> dyn_array = temp_class().i + dynamic_array<int>(temp_class().i);
при этом мне не совсем ясно, во что может происходить неявный каст. У меня предположения что оно использует
template<size_t N> dynamic_array(T (&&array)[N]),
который использует
std::move, а затем пытается взять этот dynamic_array&& и сложить с другим
dynamic_array<T>&&
, который уже имеет свой оператор в классе:
operator +(dynamic_array<T>&& dyn_array);
Я знаю о решении через запись operator+(array, container), но она мне кажется громоздкой. Если другие способы обхода данной проблемы?