What's going on here?
Saying that p has type P (where P is a template parameter) says little about p
...except that the function body requires us to be able to evaluate *p++ and compare the result to t
The requirements on P are implicit, and come out only during instantiation