#include <iostream>
using namespace std;
namespace noncopyable_ // protection from unintended ADL
{
class noncopyable
{
protected:
noncopyable()
{
std::cout << "default noncopyable()/n";
}
~noncopyable() {}
//private:
noncopyable(const noncopyable& that)
{
std::cout << "copy noncopyable()/n";
}
const noncopyable& operator=(const noncopyable& that);
};
} // namespace noncopyable_
typedef noncopyable_::noncopyable noncopyable;
class Test : private noncopyable
{
public:
Test() : m_val() {}
Test(const Test& other) : m_val(other.m_val) {}
~Test() {}
private:
int m_val;
};
int main()
{
Test t1;
Test t2(t1);
std::cout << "end of test./n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIG5vbmNvcHlhYmxlXyAgLy8gcHJvdGVjdGlvbiBmcm9tIHVuaW50ZW5kZWQgQURMCnsKCiAgICBjbGFzcyBub25jb3B5YWJsZQogICAgewogICAgcHJvdGVjdGVkOgoKICAgICAgICBub25jb3B5YWJsZSgpCiAgICAgICAgewogICAgICAgIAlzdGQ6OmNvdXQgPDwgImRlZmF1bHQgbm9uY29weWFibGUoKS9uIjsKICAgICAgICB9CiAgICAgICAgfm5vbmNvcHlhYmxlKCkge30KCiAgICAvL3ByaXZhdGU6ICAKICAgICAgICBub25jb3B5YWJsZShjb25zdCBub25jb3B5YWJsZSYgdGhhdCkKICAgICAgICB7CiAgICAgICAgCXN0ZDo6Y291dCA8PCAiY29weSBub25jb3B5YWJsZSgpL24iOwogICAgICAgIH0KICAgICAgICBjb25zdCBub25jb3B5YWJsZSYgb3BlcmF0b3I9KGNvbnN0IG5vbmNvcHlhYmxlJiB0aGF0KTsKICAgIH07Cgp9IC8vIG5hbWVzcGFjZSBub25jb3B5YWJsZV8KCnR5cGVkZWYgbm9uY29weWFibGVfOjpub25jb3B5YWJsZSBub25jb3B5YWJsZTsKCmNsYXNzIFRlc3QgOiBwcml2YXRlIG5vbmNvcHlhYmxlCnsKcHVibGljOgogICAgVGVzdCgpIDogbV92YWwoKSB7fQogICAgVGVzdChjb25zdCBUZXN0JiBvdGhlcikgOiBtX3ZhbChvdGhlci5tX3ZhbCkge30KICAgIH5UZXN0KCkge30KCnByaXZhdGU6CiAgICBpbnQgbV92YWw7Cn07CgppbnQgbWFpbigpCnsKCVRlc3QgdDE7CiAgICBUZXN0IHQyKHQxKTsKCXN0ZDo6Y291dCA8PCAiZW5kIG9mIHRlc3QuL24iOwoJcmV0dXJuIDA7Cn0=