Does a reference have a storage location or is it just an alias for another location? Does this differ by C++ revision or is it consistent with all versions of C++? And if a
Most compilers, for any C++ standard up to C++17 at least, will effectively implement a reference as a pointer, unless optimized out.
In particular, inside an struct
, it will take take up the size of a pointer (plus alignment/padding etc.).
Therefore, this will hold in most environments:
struct S {
char & a;
};
static_assert(sizeof(S) == sizeof(void *));