I just ran across the following warning in GCC:
warning: implicit dereference will not access object of type ‘volatile util::Yield’ in statement [enabled by default]
while compiling this code:
volatile util::Yield y1;
util::Yield y2;
y1 += y2; // <--- Warning triggered here.
and unfortunately I do not quite understand what GCC is trying to tell me…
The class Yield is declared as follows:
class Yield {
public:
Yield();
Yield &operator+=(Yield const &other);
Yield &operator+=(Yield const volatile &other);
Yield volatile &operator+=(Yield const &other) volatile;
Yield volatile &operator+=(Yield const volatile &other) volatile;
// Other operators snipped...
};
Any ideas?
Thanks!
From the GCC manual, Section 6.1 – When is a Volatile Object Accessed?
The warning stems from the fact that the += operator returns a reference to a volatile object, and that the expression ‘y1 += y2’ ignores that return value. The compiler is letting you know that the reference will not actually be dereferenced (i.e. the volatile value will not be read).