Does a reference have a storage location?
The latest C++20 spec(§ 9.2.3.3) and at least since the C++ 2005 draft spec state:
It is unspecified whether or not a reference requires storage
The actual implementation is on a case-by-case basis. Obviously if a class has a single member variable that is a reference that will need to be stored somewhere. But the compiler has leeway when to use a reference solely as an alias, as you put it.
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 *));