The overload works fine for most of the contexts, and AFAIK is the suggested baseline approach. (see GOTW suggested by juanchopanza )
The difference hits if someone explicitly asks for the template, calling min<int>(x, y)
. In that case overloads are ignored and only the template (base or specialized) are considered.