#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <memory>
#include <map>
#include <set>
class HasPtr
{
public :
HasPtr( std:: string & s = std:: string ( ) )
: ptr( new std:: string ( s) ) , use( new std:: size_t ( 1 ) ) { }
HasPtr( const HasPtr & p)
: ptr( p.ptr ) , use( p.use )
{
++* use;
std:: cout << "copy constructor" << std:: endl ;
}
~HasPtr( )
{
if ( --* use == 0 )
{
delete ptr;
delete use;
}
}
HasPtr& operator= ( const HasPtr & rhs)
{
//++*rhs.use;
if ( --* use)
{
delete ptr;
delete use;
}
++* rhs.use ;
ptr = rhs.ptr ;
use = rhs.use ;
std:: cout << "operaator=" << std:: endl ;
return * this ;
}
private :
std:: string * ptr;
std:: size_t * use;
} ;
void f( HasPtr x) { }
int main( )
{
HasPtr h( std:: string ( "xxx" ) ) ;
h = h;
f( h) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxtZW1vcnk+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CgpjbGFzcyBIYXNQdHIKewpwdWJsaWM6CglIYXNQdHIoc3RkOjpzdHJpbmcgJnMgPSBzdGQ6OnN0cmluZygpKQoJCTogcHRyKG5ldyBzdGQ6OnN0cmluZyhzKSksIHVzZShuZXcgc3RkOjpzaXplX3QoMSkpIHt9CglIYXNQdHIoY29uc3QgSGFzUHRyICZwKQoJCTogcHRyKHAucHRyKSwgdXNlKHAudXNlKQoJewoJCSsrKnVzZTsKCQlzdGQ6OmNvdXQgPDwgImNvcHkgY29uc3RydWN0b3IiIDw8IHN0ZDo6ZW5kbDsKCX0KCX5IYXNQdHIoKQoJewoJCWlmICgtLSp1c2UgPT0gMCkKCQl7CgkJCWRlbGV0ZSBwdHI7CgkJCWRlbGV0ZSB1c2U7CgkJfQoJfQoJSGFzUHRyJiBvcGVyYXRvcj0oY29uc3QgSGFzUHRyICZyaHMpCgl7CgkJLy8rKypyaHMudXNlOwoJCWlmICgtLSp1c2UpCgkJewoJCQlkZWxldGUgcHRyOwoJCQlkZWxldGUgdXNlOwoJCX0KCQkrKypyaHMudXNlOwoJCXB0ciA9IHJocy5wdHI7CgkJdXNlID0gcmhzLnVzZTsKCgkJc3RkOjpjb3V0IDw8ICJvcGVyYWF0b3I9IiA8PCBzdGQ6OmVuZGw7CgoJCXJldHVybiAqdGhpczsKCX0KcHJpdmF0ZToKCXN0ZDo6c3RyaW5nICpwdHI7CglzdGQ6OnNpemVfdCAqdXNlOwp9OwoKdm9pZCBmKEhhc1B0ciB4KSB7fQoKaW50IG1haW4oKQp7CglIYXNQdHIgaChzdGQ6OnN0cmluZygieHh4IikpOwoJaCA9IGg7CglmKGgpOwoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp:13:38: error: invalid initialization of non-const reference of type 'std::string& {aka std::basic_string<char>&}' from an rvalue of type 'std::string {aka std::basic_string<char>}'
HasPtr(std::string &s = std::string())
^
prog.cpp: In function 'int main()':
prog.cpp:54:29: error: invalid initialization of non-const reference of type 'std::string& {aka std::basic_string<char>&}' from an rvalue of type 'std::string {aka std::basic_string<char>}'
HasPtr h(std::string("xxx"));
^
prog.cpp:13:2: note: initializing argument 1 of 'HasPtr::HasPtr(std::string&)'
HasPtr(std::string &s = std::string())
^
stdout