How to properly implement move semantics in a template class?

Since your class does not manage the lifetime/acquisition of any resource follow the rule of zero. Don't write any copy/move ctor/assignment or dtor. They will be implicitly declared.

As a side-note you need to use list initializers in your ctor, especially since your data members are template arguments.