Function Overload seams to work wrong!

Groove:
Think of it this way:
There's nothing in the language rules that says a char array has to contain a null-terminated string - it could for instance, specify a MAC address, or the state of some inputs - so there is absolutely no necessity to assume that it can, or should, be automatically converted to a String.

The String class has an assignment operator and copy constructor for a char pointer; so this conversion is well defined.

You can see this in use on the fourth line from setup in the OP's code. The reason this code is not working is because the C++ overload selection rules do not use user defined conversions in their deduction.

If the functions weren't overloaded (only the function accepting String) then calling the function using a char pointer or char array would work fine.

Two methods of fixing this have already been discussed. Either casting the input to a String, or overloading the function again with a more specific parameter (char pointer).

There is a third option, and it is to make the bool function only accept a bool as input, not types converted to a bool. This will prevent the string literal from implicitly casting to bool.