First, observe that Node is a member class of List in the private section. This means a user cannot directly access Node. On line 10, the actual type T is used to create the storage to store an object of the user specified type. On line 11, the next “pointer” is defined, only that we use WhereIs<Node> as the type. Note that T is nowhere to seen. This is okay, because Node is already specialized to handle a payload of type T.
On line 15, we first detach next from whatever it was referring to, then make it an alias of the parameter.