Next: , Up: C++ Extensions

6.1 When is a Volatile Object Accessed?


See Volatile qualifier and the C compiler.

The behavior differs slightly between C and C++ in the non-obvious cases:

     volatile int *src = somevalue;

With C, such expressions are rvalues, and GCC interprets this either as a read of the volatile object being pointed to or only as request to evaluate the side-effects. The C++ standard specifies that such expressions do not undergo lvalue to rvalue conversion, and that the type of the dereferenced object may be incomplete. The C++ standard does not specify explicitly that it is this lvalue to rvalue conversion which may be responsible for causing an access. However, there is reason to believe that it is, because otherwise certain simple expressions become undefined. However, because it would surprise most programmers, G++ treats dereferencing a pointer to volatile object of complete type when the value is unused as GCC would do for an equivalent type in C. When the object has incomplete type, G++ issues a warning; if you wish to force an error, you must force a conversion to rvalue with, for instance, a static cast.
