Usually it's a reference, but it can be a copy as well. Check std::atomic.operator=.
If you don't have a good reason for copy, then just define the return type as a reference.