+6  A: 

Just take by const reference ALWAYS, because there isn't much overhead in passing primitive types as const references.

Armen Tsirunyan
Manoj R
@Manoj: Then a temporary `complex` object is created (initialised with `2`) and passed to the function. This temporary will live until the end of the expression containing the function-call.
Bart van Ingen Schenau
@Manoj: const references, unlike non-const ones, can bind to rvalues, so don't worry about that
Armen Tsirunyan
+5  A: 

Write your template code for const references only and rely on the compiler to optimize the references away.

larsmans