1) Replace max("a", "b") with max("b", "a"). Run it, look closely at the result, and be enlightened.
2) Replace max("a", "b") with max<string>("a", "b"). Run it, look at the result, and be enlightened in a different way.
As a small hint, your code invokes unspecified behavior, while my code invokes undefined behavior.
If this exercise doesn't put the fear of C++ into you, then I don't know what will :-)