O o1 Def. constructor #0 O o2 = 2 Int constructor #1(2) O o3 = o2 Copy constructor #2( #1{2} ) o1 = o3 Copy assignemnt #0{NULL} = #2{2} O o4 = func1() func1: O o(10) Int constructor #3(10) return o Move constructor #4( #3{10} ) Destructor of #3{NULL} O o5 = 5 Int constructor #5(5) o5 = func1() func1: O o(10) Int constructor #6(10) return o Move constructor #7( #6{10} ) Destructor of #6{NULL} Move assignemnt #5{5} = #7{10} Destructor of #7{NULL} func2(o5) Copy constructor #8( #5{10} ) func2: Destructor of #8{10} func2b(o5) func2b: exit Destructor of #5{10} Destructor of #4{10} Destructor of #2{2} Destructor of #1{2} Destructor of #0{2}