I think a solution will be to outright ban such a conversion - where an lvalue array to pointer conversion will not be allowed in context where bool is expected.

On Sat, Jul 22, 2023 at 11:39 AM sasho648 <sasho648@gmail.com> wrote:

int arr[2];
bool test = arr;
bool teststr = "string";


Which I came across while having a function like this:

void set_property(const char *name, const char *default_value);
void set_property_bool(const char*name, bool default_value);

Where I thought the bool one was expecting a string as second argument as well and so I wrote:

set_property_bool("test", "true");

Which compiled fine and even worked until I decided to change it to:

set_property_bool("test", "false");

In my opinion such a conversion holds no value - since it has only one outcome - and furthermore I think it's against C++ type safety - and even furthermore I think currently it's only purpose is obfuscation contests or creating hard to diagnose bugs as the case I've shown above.