#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; }
};
namespace release {
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::release;
std::cout << mc << std::endl;
}
void runDebug() {
using namespace test::debug;
std::cout << mc << std::endl; // das erzeugt nun keinen Fehler mehr
//test::debug::operator<<(std::cout, mc) << std::endl; // so klappt das
}
int main() {
run();
runDebug();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKbmFtZXNwYWNlIHRlc3QgewoJc3RydWN0IG15Q2xhc3MgewoJCXN0ZDo6c3RyaW5nIF9uYW1lOwoKCQlleHBsaWNpdCBteUNsYXNzKHN0ZDo6c3RyaW5nIG5hbWUpIDogX25hbWV7IG5hbWUgfSB7fQoJCXZvaWQgcHJpbnQoc3RkOjpvc3RyZWFtJiBvcykgY29uc3QgeyBvcyA8PCBfbmFtZTsgfQoJfTsKCiAgICBuYW1lc3BhY2UgcmVsZWFzZSB7CgkgICAgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IG15Q2xhc3MmIG1DKSB7CgkJICAgIG1DLnByaW50KG9zKTsKCQkgICAgcmV0dXJuIG9zOwoJICAgIH0KCX0KCQoJbmFtZXNwYWNlIGRlYnVnIHsKCQlzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgbXlDbGFzcyYgbUMpIHsKCQkJb3MgPDwgImRlYnVnOiAiOwoJCQltQy5wcmludChvcyk7CgkJCXJldHVybiBvczsKCQl9Cgl9Cn0KCnRlc3Q6Om15Q2xhc3MgbWN7IkthaSJ9OwoKdm9pZCBydW4oKSB7Cgl1c2luZyBuYW1lc3BhY2UgdGVzdDo6cmVsZWFzZTsKCXN0ZDo6Y291dCA8PCBtYyA8PCBzdGQ6OmVuZGw7Cn0KCnZvaWQgcnVuRGVidWcoKSB7Cgl1c2luZyBuYW1lc3BhY2UgdGVzdDo6ZGVidWc7CglzdGQ6OmNvdXQgPDwgbWMgPDwgc3RkOjplbmRsOwkJLy8gZGFzIGVyemV1Z3QgbnVuIGtlaW5lbiBGZWhsZXIgbWVocgoJLy90ZXN0OjpkZWJ1Zzo6b3BlcmF0b3I8PChzdGQ6OmNvdXQsIG1jKSA8PCBzdGQ6OmVuZGw7CQkvLyBzbyBrbGFwcHQgZGFzCgp9CgppbnQgbWFpbigpIHsKCXJ1bigpOwoJcnVuRGVidWcoKTsKCQoJcmV0dXJuIDA7Cn0K