Because you're running the type promotion rules backwards, I think. Seeing () means the compiler will run the usual type promotions, as though it were a ,... type function--integral types get promoted to int, floating point types to double. Now that's that done, you can't go backwards and say "hey that's a char" -- there's no demotion back to a char from an int.