#include <iostream>
#include <string>
namespace test {
struct myClass {
std::string _name;
explicit myClass(std::string name) : _name{ name } {}
void print(std::ostream& os) const { os << _name; }
};
std::ostream& operator<<(std::ostream& os, const myClass& mC) {
mC.print(os); return os;
}
namespace debug {
std::ostream& operator<<(std::ostream& os, const myClass& mC) {
os << "debug: ";
mC.print(os);
return os;
}
}
}
test::myClass mc{"Kai"};
void run() {
using namespace test;
std::cout << mc << std::endl;
}
void runDebug() {
//using test::debug::operator<<;
std::cout << mc << std::endl; // das erzeugt den Fehler
// test::debug::operator<<(std::cout, mc) << std::endl; // so klappt das
}
int main() {
run();
runDebug();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKbmFtZXNwYWNlIHRlc3QgewoJc3RydWN0IG15Q2xhc3MgewoJCXN0ZDo6c3RyaW5nIF9uYW1lOwoKCQlleHBsaWNpdCBteUNsYXNzKHN0ZDo6c3RyaW5nIG5hbWUpIDogX25hbWV7IG5hbWUgfSB7fQoJCXZvaWQgcHJpbnQoc3RkOjpvc3RyZWFtJiBvcykgY29uc3QgeyBvcyA8PCBfbmFtZTsgfQoJfTsKCglzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgbXlDbGFzcyYgbUMpIHsKCQltQy5wcmludChvcyk7CXJldHVybiBvczsKCX0KCgluYW1lc3BhY2UgZGVidWcgewoJCXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBteUNsYXNzJiBtQykgewoJCQlvcyA8PCAiZGVidWc6ICI7CgkJCW1DLnByaW50KG9zKTsKCQkJcmV0dXJuIG9zOwoJCX0KCX0KfQoKdGVzdDo6bXlDbGFzcyBtY3siS2FpIn07Cgp2b2lkIHJ1bigpIHsKCXVzaW5nIG5hbWVzcGFjZSB0ZXN0OwoJc3RkOjpjb3V0IDw8IG1jIDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCBydW5EZWJ1ZygpIHsKCS8vdXNpbmcgdGVzdDo6ZGVidWc6Om9wZXJhdG9yPDw7CglzdGQ6OmNvdXQgPDwgbWMgPDwgc3RkOjplbmRsOwkJLy8gZGFzIGVyemV1Z3QgZGVuIEZlaGxlcgoJLy8gdGVzdDo6ZGVidWc6Om9wZXJhdG9yPDwoc3RkOjpjb3V0LCBtYykgPDwgc3RkOjplbmRsOwkJLy8gc28ga2xhcHB0IGRhcwoKfQoKaW50IG1haW4oKSB7CglydW4oKTsKCXJ1bkRlYnVnKCk7CgkKCXJldHVybiAwOwp9Cg==