- Is there an implicit cast from temporary values (values of built-in type, and temporary objects) to objects of type
rvalue reference
?
First a nitpick, casts are explicit conversions by definition, so there cannot be an implicit cast. Beyond that, a reference is distinctly not an object type. It may even not require any storage. References are bound to objects. It'd be more appropriate to think about them as alternative names of objects. Rvalue references in particular can only bind to objects of a particular sort. Which are roughly all "nameless" and "temporary" values. We may also cast to an rvalue reference to force an object being designated as "about to expire".
There's however an intricate point here, once an rvalue reference binds to an object, it's no longer "nameless". In particular, this means that by using that reference we call an object "by name" and thus obtain an lvalue. Furthermore, and to coincide with that, binding a reference in block scope to a temporary, prolongs the lifetime of the temporary until the end of the scope. And that brings us to the next point.
- Does
a
has an address?
Yes and no. The refernece itself may or may not require storage, as I said previously. But that's moot, since it's just the name of an object. Taking the address of a reference will yield the address of the object that was bound to it. In this case, it will be the address of the temporary bound to it.