Question

According to the C++ standard:

A standard-layout class is a class that:

—has no non-static data members of type non-standard-layout class (or array of such types) or reference.

What property(ies) of references prevent classes with reference members from being included in the definition of a standard layout class?

Was it helpful?

Solution

A standard layout class is all about having a well defined layout for a particular type in memory. In C++, references aren't objects so don't have any storage that can be accessed in a well defined way by a conforming program even though the implementation will usually have to have some sort of implementation specific storage for them.

For this reason it doesn't make sense to have reference members in something that must have a standard layout.

There's a non-normative note in the standard in the section about the C++ memory model that mentions this:

[ Note: Various features of the language, such as references and virtual functions, might involve additional memory locations that are not accessible to programs but are managed by the implementation. —end note ]

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top