After a function is declared and defined, it can be called from anywhere within the program: from within the main function, from another function, and even from itself. Calling the function involves specifying the function name, followed by the function call operator and any data values the function expects to receive. These values are the arguments for the parameters defined for the function. This process is called passing arguments to the function.
Pass by reference (C++ only),
which passes the reference of an argument to the corresponding
parameter in the called function.
If a class has a destructor or a copy constructor that does
more than a bitwise copy, passing a class object by value results
in the construction of a temporary object that is actually passed
by reference.

A function call is always an rvalue.
A function call belongs to one of the
following value categories depending on the result type of the function:
or an rvalue
reference to a function type
An xvalue if the result type is an rvalue reference to an
object type
(prvalue)
rvalue in other cases