По крайней мере у меня G++ выдал предупреждение вот тут:
List<size_t>& newList(size_t a) {
List<size_t> result;
result.pushBack(a);
return result;
}
C:\TestApps\ListTest\main.cpp | 118 | warning: reference to local variable 'result' returned [-Wreturn-local-addr]
Понятно?
Что изменить…
1. Изменить сигнатуру на…
List<size_t> newList(size_t a) {
2. Поработать с временными ссылками Си++11. Добавить две функции.
List(List<T>&& other);
List<T>& operator = (List<T>&& other);
Два амперсанда — это не ссылка на ссылку (понятие «ссылка» идемпотентно), а новая вещь Си++11 — ссылка на временный объект. Она говорит: объект идёт на заклание, из него можно выпотрошить все данные.
3. Насчёт обычной операции присваивания — её можно или реализовать, или =delete (тоже нововведение Си++11).
4. UPD. Проглючил, но да, верно. Обычный конструктор копирования должен иметь параметр const!