#include <iostream>
#include <string>
struct Foo
{
Foo& operator= (bool value) {std::cout << "bool\n"; return *this;}
Foo& operator= (const std::string& value) {std::cout << "string\n"; return *this;}
};
int main() {
Foo foo;
foo = true; // works...assigned as bool
foo = "i_am_a_string"; // SURPRISE...assigned as bool, not string
std::string s = "i_am_a_string";
foo = s; // works...assigned as string
foo = static_cast<std::string>("i_am_a_string"); // works...but awkward
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IEZvbwp7CiAgICBGb28mIG9wZXJhdG9yPSAoYm9vbCB2YWx1ZSkge3N0ZDo6Y291dCA8PCAiYm9vbFxuIjsgcmV0dXJuICp0aGlzO30KICAgIEZvbyYgb3BlcmF0b3I9IChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHtzdGQ6OmNvdXQgPDwgInN0cmluZ1xuIjsgcmV0dXJuICp0aGlzO30KfTsKCmludCBtYWluKCkgewogICBGb28gZm9vOwogICBmb28gPSB0cnVlOyAvLyB3b3Jrcy4uLmFzc2lnbmVkIGFzIGJvb2wKICAgZm9vID0gImlfYW1fYV9zdHJpbmciOyAvLyBTVVJQUklTRS4uLmFzc2lnbmVkIGFzIGJvb2wsIG5vdCBzdHJpbmcKICAgc3RkOjpzdHJpbmcgcyA9ICJpX2FtX2Ffc3RyaW5nIjsgCiAgIGZvbyA9IHM7IC8vIHdvcmtzLi4uYXNzaWduZWQgYXMgc3RyaW5nCiAgIGZvbyA9IHN0YXRpY19jYXN0PHN0ZDo6c3RyaW5nPigiaV9hbV9hX3N0cmluZyIpOyAvLyB3b3Jrcy4uLmJ1dCBhd2t3YXJkCn0=