Implications
When we write a template function with a general type parameter, we can call it with an argument that has any type with the appropriate properties
The compiler checks those properties during template instantiation, before the program runs
No overhead at execution time