#include <iostream>
struct foo
{
void bar( ) { std:: cout << "Hello, world!" << std:: endl ; }
} ;
foo create_foo( )
{
return foo( ) ;
}
int main( )
{
// This is perfectly legit even though returned object is an rvalue
create_foo( ) .bar ( ) ; // if temporary was const I could not call bar()
// This is not possible: r-value cannot be bound to a l-value reference
auto & f = create_foo( ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGZvbwp7Cgl2b2lkIGJhcigpIHsgc3RkOjpjb3V0IDw8ICJIZWxsbywgd29ybGQhIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmZvbyBjcmVhdGVfZm9vKCkKewoJcmV0dXJuIGZvbygpOwp9CgppbnQgbWFpbigpCnsKCS8vIFRoaXMgaXMgcGVyZmVjdGx5IGxlZ2l0IGV2ZW4gdGhvdWdoIHJldHVybmVkIG9iamVjdCBpcyBhbiBydmFsdWUKCWNyZWF0ZV9mb28oKS5iYXIoKTsgLy8gaWYgdGVtcG9yYXJ5IHdhcyBjb25zdCBJIGNvdWxkIG5vdCBjYWxsIGJhcigpCgkKCS8vIFRoaXMgaXMgbm90IHBvc3NpYmxlOiByLXZhbHVlIGNhbm5vdCBiZSBib3VuZCB0byBhIGwtdmFsdWUgcmVmZXJlbmNlCglhdXRvICYgZiA9IGNyZWF0ZV9mb28oKTsKfQ==