X0: construct
Direct initialization from lvalue
X a(( lvalue() ))
===========
X1: <- X0: **copy**
X1: destroy
-----------
1/1 possible copies made
0/0 possible moves made
0/0 possible elisions performed
Direct initialization from rvalue
X a(( rvalue() ))
===========
X2: construct
X2: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Direct initialization from rvalue, constructed with vector
X a(( rvalue(vector()) ))
===========
X3: construct (with vector)
X3: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Copy initialization from lvalue
X a = lvalue()
===========
X4: <- X0: **copy**
X4: destroy
-----------
1/1 possible copies made
0/0 possible moves made
0/0 possible elisions performed
Copy initialization from rvalue
X a = rvalue()
===========
X5: construct
X5: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Copy initialization from rvalue, constructed with vector
X a = rvalue(vector())
===========
X6: construct (with vector)
X6: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Pass lvalue by value
sink( lvalue() )
===========
X7: <- X0: **copy**
->: sink
<-: sink
X7: destroy
-----------
1/1 possible copies made
0/0 possible moves made
0/0 possible elisions performed
Pass rvalue by value
sink( rvalue() )
===========
X8: construct
->: sink
<-: sink
X8: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Pass rvalue by value, constructed with vector
sink( rvalue(vector()) )
===========
X9: construct (with vector)
->: sink
<-: sink
X9: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Named return value optimization (NRVO)
nrvo_source()
===========
->: nrvo_source
X10: construct
<-: nrvo_source
X10: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Named return value optimization (NRVO), constructed with vector
nrvo_source_vector()
===========
->: nrvo_source_vector
X11: construct (with vector)
<-: nrvo_source_vector
X11: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Unnamed return value optimization (URVO)
urvo_source()
===========
->: urvo_source
X12: construct
<-: urvo_source
X12: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Unnamed return value optimization (URVO), constructed with vector
urvo_source_vector()
===========
->: urvo_source_vector
X13: construct (with vector)
<-: urvo_source_vector
X13: destroy
-----------
0/1 possible copies made
0/1 possible moves made
1/1 possible elisions performed
Return value used as ctor arg
X a(urvo_source())
===========
->: urvo_source
X14: construct
<-: urvo_source
X14: destroy
-----------
0/2 possible copies made
0/2 possible moves made
2/2 possible elisions performed
Return rvalue passed by value
identity( rvalue() )
===========
X15: construct
->: identity
X16: <- X15: **move**
<-: identity
X16: destroy
X15: destroy
-----------
0/2 possible copies made
1/2 possible moves made
1/2 possible elisions performed
*** 1 possible elisions missed! ***
X0: destroy