I'm new to templates and smart pointers, I'm wondering if the below is pretty much a leak free implementation? Obviously it lacks functionality, and i'm assuming to remove an element you just change the previous next pointer to the one after it, and the memory will be auto freed?
This doesn’t answer your question, but just as an aside note, if your compiler already support std::observer_ptr https://en.cppreference.com/w/cpp/experimental/observer_ptr
you could try to use it in place of std::shared_ptr (all nodes should anyway be managed by a unique_ptr, shouldn’t they?).