Objects as arguments and as return values

I have a question about how the arguments are copied to a function and how the return value is copied out of the function:

Say that you have two classes, A and B, and a function func:

Code:

B func(A arg) {
B ret;
return ret:
}

and som more code

Code:

A in;
func(A).print(); //Suppose B contains a print funtion

Now, when in is sent to func, it is copied to arg, but how is it copied? Is it done like A arg; arg = in; or like A arg(in);? Or in some other way? And what object is operated on when the print function is called, and how is that object created; is it a copy of ret or is it the ret object itself (before it is destroyed)?

The arg object is I believe copy-constructed. In main, a temporary B is created which gets the return value from func (again copy-constructed IIRC) and that object is used to call print. (Since it's a temporary object, print must be marked const.)

EDIT: And of course, you don't have to believe me; create a copy constructor and an operator = that print something to the screen, run the code, and see what happens. (Same for destructor of B.)