#include <iostream>
using namespace std;
class Test {
public:
Test(const string& x) { //<<<<<<<<<<<<<<<<<< TRY WITH AND WITHOUT EXPLICIT
cout<<"Conversion constructor called"<<endl;
}
};
// Two overloaded functions:
void f(Test t) {
cout<<"Function called for a Test"<<endl;
}
void f(string &s){
cout<<"Function called for a string"<<endl;
}
// demo
int main() {
string hello="Hello";
const string world="World";
f(hello);
f(world); //<<<<<<<<<<< would you expect the string version to be called?
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdCB7CnB1YmxpYzogIAogICAgVGVzdChjb25zdCBzdHJpbmcmIHgpIHsgICAgIC8vPDw8PDw8PDw8PDw8PDw8PDw8IFRSWSBXSVRIIEFORCBXSVRIT1VUIEVYUExJQ0lUCiAgICAJY291dDw8IkNvbnZlcnNpb24gY29uc3RydWN0b3IgY2FsbGVkIjw8ZW5kbDsgCiAgICB9Cn07CgovLyBUd28gb3ZlcmxvYWRlZCBmdW5jdGlvbnM6IAp2b2lkIGYoVGVzdCB0KSB7Cgljb3V0PDwiRnVuY3Rpb24gY2FsbGVkIGZvciBhIFRlc3QiPDxlbmRsOyAKfQp2b2lkIGYoc3RyaW5nICZzKXsKCWNvdXQ8PCJGdW5jdGlvbiBjYWxsZWQgZm9yIGEgc3RyaW5nIjw8ZW5kbDsgCn0KCi8vIGRlbW8KaW50IG1haW4oKSB7CglzdHJpbmcgaGVsbG89IkhlbGxvIjsKCWNvbnN0IHN0cmluZyB3b3JsZD0iV29ybGQiOwoJZihoZWxsbyk7CglmKHdvcmxkKTsgIC8vPDw8PDw8PDw8PDwgd291bGQgeW91IGV4cGVjdCB0aGUgc3RyaW5nIHZlcnNpb24gdG8gYmUgY2FsbGVkPwp9