#include <iostream>
using namespace std;
class baseclass {
protected :
int field;
public :
baseclass( baseclass const & ) = delete ;
baseclass& operator= ( baseclass const & ) = delete ;
baseclass( ) : field( 0 ) { }
baseclass( int a) : field( a) { }
} ;
class derived1 : private baseclass { } ;
class derived2 : private baseclass {
public :
derived2( ) = default ;
derived2( derived2 const & other) {
baseclass( other.field ) ;
}
derived2& operator= ( derived2 const & other) {
field = other.field ;
return * this ;
}
} ;
int main( ) {
// your code goes here
derived1 d1;
auto d1c = d1;
derived2 d2;
auto d2c = d2;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgYmFzZWNsYXNzIHsKCXByb3RlY3RlZDoKCWludCBmaWVsZDsgCgkKCXB1YmxpYzoKCWJhc2VjbGFzcyhiYXNlY2xhc3MgY29uc3QmKSA9IGRlbGV0ZTsKCWJhc2VjbGFzcyYgb3BlcmF0b3I9KGJhc2VjbGFzcyBjb25zdCYpID0gZGVsZXRlOwoJCgliYXNlY2xhc3MoKSA6IGZpZWxkKDApIHt9CgliYXNlY2xhc3MoaW50IGEpIDogZmllbGQoYSkge30KfTsKCmNsYXNzIGRlcml2ZWQxIDogcHJpdmF0ZSBiYXNlY2xhc3Mge307CgpjbGFzcyBkZXJpdmVkMiA6IHByaXZhdGUgYmFzZWNsYXNzIHsKCXB1YmxpYzoKCWRlcml2ZWQyKCkgPSBkZWZhdWx0OwoJZGVyaXZlZDIoZGVyaXZlZDIgY29uc3QgJiBvdGhlcikgewoJCWJhc2VjbGFzcyhvdGhlci5maWVsZCk7Cgl9CglkZXJpdmVkMiYgb3BlcmF0b3I9KGRlcml2ZWQyIGNvbnN0JiBvdGhlcikgewoJCWZpZWxkID0gb3RoZXIuZmllbGQ7CgkJcmV0dXJuICp0aGlzOwoJfQp9OwoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCglkZXJpdmVkMSBkMTsKCWF1dG8gZDFjID0gZDE7CgkKCWRlcml2ZWQyIGQyOwoJYXV0byBkMmMgPSBkMjsKCQoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In function 'int main()':
prog.cpp:35:13: error: use of deleted function 'derived1::derived1(const derived1&)'
auto d1c = d1;
^
prog.cpp:16:7: note: 'derived1::derived1(const derived1&)' is implicitly deleted because the default definition would be ill-formed:
class derived1 : private baseclass {};
^
prog.cpp:16:7: error: use of deleted function 'baseclass::baseclass(const baseclass&)'
prog.cpp:9:2: note: declared here
baseclass(baseclass const&) = delete;
^
stdout