Thanks sipa and maflcko. I didn’t realize you were allowed to pass explicit template arguments to functions declared without template parameters, but it makes sense given the equivalence shown. It is also interesting to see ASTs of these functions in godbolt, even though I did understand that clang-tidy could see when template parameters were referenced.
Upshot seems to be that it would be possible to write a clang-tidy linter that would not force you to write broken code (because template arguments can be passed to functions not written with template parameters). But this linter could still force you to write code that does not reflect your intent, if you are are intending for a function to accept template arguments and the linter forces you to drop the parameters.
I have to say, I don’t actually understand why 3 experienced c++ developers (maflcko, l0rinc, sipa) would be on the fence in this case about whether functions not intended to accept template parameters should be written as function templates, but vive la difference.