#include <iostream>
#include <vector>
using namespace std;
class B{ } ;
class C : public B{ } ;
template < class T>
class A {
public :
A( T * p) : ptr( p) { }
A & operator = ( A && p) {
swap ( p.ptr , ptr ) ;
return * this ;
}
void pr( ) { cout << * ptr<< endl; }
private :
T * ptr;
int ai;
} ;
int main( ) {
int a= 5 ;
int * p1= & a;
//A <B> pa2(new C);
A < int * > pa1 ( new int * ( p1 ) ) ;
// pa1.pr();
A< int > aob1( p1) ;
aob1.pr ( ) ;
int b= 6 ;
int * p2= & b;
A< int > aob2( p2) ;
aob2.pr ( ) ;
aob2= aob1;
aob2.pr ( ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBCe307CmNsYXNzIEMgOiBwdWJsaWMgQnt9Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQSB7CiAgICBwdWJsaWM6CiAgICAgICAgQShUICogcCkgOiBwdHIocCkge30KICAgICAgICBBICYgb3BlcmF0b3IgPSAoIEEgJiYgcCl7CiAgICAgICAgICAgIHN3YXAgKHAucHRyLCBwdHIgKTsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgICB2b2lkIHByKCl7Y291dDw8KnB0cjw8ZW5kbDt9CiAgICBwcml2YXRlOgogICAgICAgIFQgKiBwdHI7CiAgICAgICAgaW50IGFpOwp9OwppbnQgbWFpbigpewogICAgaW50IGE9NTsKICAgIGludCAqcDE9JmE7CiAgICAvL0EgPEI+IHBhMihuZXcgQyk7CiAgICBBIDxpbnQgKj4gcGExIChuZXcgaW50ICoocDEgKSk7CiAgICAvLyBwYTEucHIoKTsKICAgIEE8aW50PiBhb2IxKHAxKTsKICAgIGFvYjEucHIoKTsKICAgIGludCBiPTY7CiAgICBpbnQgKnAyPSZiOwogICAgQTxpbnQ+IGFvYjIocDIpOwogICAgYW9iMi5wcigpOwogICAgYW9iMj1hb2IxOwogICAgYW9iMi5wcigpOwp9
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:31:10: error: use of deleted function ‘constexpr A<int>& A<int>::operator=(const A<int>&)’
aob2=aob1;
^~~~
prog.cpp:7:7: note: ‘constexpr A<int>& A<int>::operator=(const A<int>&)’ is implicitly declared as deleted because ‘A<int>’ declares a move constructor or move assignment operator
class A {
^
stdout