Because generics aren't real (you made this a generic by using "auto"). There are no generics, only pieces of code that the compiler can copy paste for whatever type you use them with at a given place.
In the first version you just declare that kind of template and make it so the compiler can use it to generate a proc when you use the template-name somewhere in your code for the specific type you have. In the second version you're trying to assign such a copy-paste template to a variable. That's not possible, because generics aren't real. They're compiler copy-paste instructions.