12.34 is a double, not a float, and doubles can't be converted to floats in a way that is guaranteed to be loss-free. Therefore, the template function
display<double>(12.34)</double>
is called.
'c' is a char, which can be automatically converted to a float without loss, and therefore the
display( float('c') )
function is called.