Reflection system is one that does not support C++ templates, so as long as it’s not UFUNCTION() UE4 won’t have issue with it and again UE4 classes themselves use those, like SpawnActor, lot of get function got auto cast templates. You also have lot of function overloads and operator overloads, another thing that is not supported by reflection system.
Adding things to reflection system except few exceptions (UObject classes, UObject pointer properties, functions for dynamic delegates) is always optional, UE4 won’t see those variables or functions but they usable in C++ and UE4 should not have issue with it. Ofcorsse you need to avoid that if you can but, in case of template functions this should not be a big deal
If that function is needed to be used in blueprint you need to make special function that will call templated function, thats how UE4 also deals with stuff outside of reflection system… i mean oyu got entire UI system UMG made as a wrapper to Slate just because Slate is made to work outside of UObject envriament