"0 but true" is not "True".
It means "treat me in numeric context as 0, but in boolean context as true".
So when you do "0 but true" + 0 you are in numeric context, so you effectively do 0+0 which is 0 and this in turn (for the ? operator) is false.
I find that quite logical (which probably shows that using Perl for too long causes brain-damage).
And by the way: You are not doing numeric addition on a string, you are evaluating "0 but true" in numeric context (to 0) - therefore no warning.